Spreadsheet-Edit
view release on metacpan or search on metacpan
lib/Spreadsheet/Edit.pm view on Meta::CPAN
if (delete $tokens{':all'}) {
# Remember parameters for tie operations which might occur later
$$self->{pkg2tieall}->{$pkg} = $parms;
push @varnames, sort $self->_all_valid_idents;
}
croak "Unrecognized token in arguments: ",avis(keys %tokens) if %tokens;
my $r = $self->_tie_col_vars($pkg, $parms, @varnames);
my $pfx = ($r == __TCV_REDUNDANT ? "[ALL REDUNDANT] " : "");
log_methcall $self, [\$pfx, \__fmt_uqarraywithqw(keys %tokens, @varnames),
\" in package $pkg"]
if $$self->{verbose};
}#tie_column_vars
#
# Accessors for misc. sheet data
#
sub attributes(@) { ${&__selfonly}->{attributes} }
sub colx() { ${&__selfmustonly}->{colx} }
sub colx_desc() { ${&__selfmustonly}->{colx_desc} }
sub data_source(;$) {
my $self = &__selfmust;
if (@_ == 0) { # 'get' request
log_methcall $self, [], [$$self->{data_source}] if $$self->{verbose};
return $$self->{data_source}
}
log_methcall $self, [@_] if $$self->{verbose};
croak "Too many args" unless @_ == 1;
$$self->{data_source} = $_[0];
$self
}
sub linenums() { ${&__selfmustonly}->{linenums} }
sub num_cols() { ${&__selfmustonly}->{num_cols} }
sub rows() { ${&__selfmustonly}->{rows} }
sub sheetname() { ${&__selfmustonly}->{sheetname} }
sub iolayers() { ${&__selfmustonly}->{iolayers} }
sub meta_info() {${&__selfmustonly}->{meta_info} }
sub input_encoding() {
# Emulate old API. We actually store input_iolayers instead now,
# so as to include :crlf if necessary.
my $self = &__selfmustonly;
local $_;
return undef unless
exists(${$self}->{input_iolayers})
&& ${$self}->{input_iolayers} =~ /encoding\(([^()]*)\)/;
return $1;
}
# See below for title_rx()
sub title_row() {
my $self = &__selfmustonly;
my $title_rx = $$self->{title_rx};
my $r = defined($title_rx) ? $$self->{rows}->[$title_rx] : undef;
log_methcall $self, [], [$r] if $$self->{verbose};
$r
}
sub rx() { ${ &__selfmustonly }->{current_rx} }
sub crow() {
my $self = &__selfmustonly;
${ $self->_onlyinapply("crow() method") }->{rows}->[$$self->{current_rx}]
}
sub linenum() {
my $self = &__selfmustonly;
my $current_rx = $$self->{current_rx} // return(undef);
$$self->{linenums}->[$current_rx];
}
sub _getref {
my ($self, $rx, $ident) = @_;
my ($rows, $colx) = @$$self{qw/rows colx/};
croak "get/set: rx $rx is out of range" if $rx < 0 || $rx > $#$rows;
my $row = $$self->{rows}->[$rx];
my $cx = $colx->{$ident};
oops("Invalid cx ".vis($cx)) if ! defined($cx) || $cx < 0 || $cx > $#$row;
\$row->[$cx];
}
# get/set a cell given by (rx,COLSPEC)
sub get($$) {
my $self = &__selfmust;
my $ref = $self->_getref(@_);
$$ref;
}
sub set($$$) {
my $self = &__selfmust;
my ($rx, $colspec, $newval) = @_;
my $ref = $self->_getref($rx, $colspec);
$$ref = $newval;
$self
}
sub __validate_sheet_arg($) {
my $sheet = shift;
croak "Argument '${\u($sheet)}' is not a Spreadsheet::Edit sheet object"
if defined($sheet) and
!blessed($sheet) || !$sheet->isa("Spreadsheet::Edit");
$sheet;
}
#---- logging ----------------------------------
# Print segmented log messages:
# Join args together, prefixing with "> " or ">> " etc.
# unless the previous call did not end with newline.
# Maintains internal state. A final call with an ending \n must occur.
sub _log {
my $self = shift;
state $in_midst;
print STDERR join "",
($in_midst ? "" : (">" x ($$self->{cmd_nesting}||1))),
map{u} @_;
$in_midst = ($_[$#_] !~ /\n\z/s);
}
my $trunclen = 200;
sub fmt_sheet($) {
my $sheet = shift;
return "undef" unless defined($sheet);
#oops unless ref($sheet) ne "" && $sheet->isa(__PACKAGE__);
( run in 2.002 seconds using v1.01-cache-2.11-cpan-a49fcb8fa48 )