Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

Push from filefind into structure

by dpath2o (Acolyte)
on Feb 03, 2012 at 03:32 UTC ( #951590=perlquestion: print w/replies, xml ) Need Help??
dpath2o has asked for the wisdom of the Perl Monks concerning the following question:

I have a subroutine that chokes on returning what I want. I make the call:
my $tmp = My::Module->new( search_directory => '/some/directory' , archive_directory => + '/some/archive' ); $tmp->My::Module::find_files;
The core of my module is this:
sub new { my($class, %args) = @_; my $self = bless( {} , $class ); my $search_directory = exists $args{search_directory} +? $args{search_directory} : '.'; $self->{search_directory} = $search_directory; my $archive_directory = exists $args{archive_directory} +? $args{archive_directory} : ''; $self->{archive_directory} = $archive_directory; my @found_files = exists $args{found_files} ? $arg +s{found_files} : []; $self->{found_files} = @found_files; return $self; } sub find_files { my $self = shift; find( \&FINDFILES , $self->{search_directory} ); sub FINDFILES { #SITE_TYPE_YY[YY]_MO[_HRMN|_HRMNSC]?.[xx|xxx] + + if ($_ =~ m/^(\w{3}|\w{4})[_](\w{4})[_](\d{4}|\d{2})[_](\d{2})[_]( +\d{2})[_]?(\d{2})?(\d{2})?(\d{2})?[.]?(\w{3}|\w{4})?/i) { push @{$self->{found_files}}, $File::Find::name; } } }
I expect to return an array of files in $tmp->{found_files} ... but I get the following:

Can't use string ("1") as an ARRAY ref while "strict refs" in use at /opt/local/lib/perl5/site_perl/5.12.3/My/ line 94.

Replies are listed 'Best First'.
Re: Push from filefind into structure
by mbethke (Hermit) on Feb 03, 2012 at 03:46 UTC

    The problematic line is this:

    $self->{found_files} = @found_files;

    $self->{found_files} is a scalar and thus provides scalar context to the right side. So @found_files evaluates to the number of its elements, but you'll later treat it like an array reference. Just put a backslash in front of it to take its reference. The array is a copy of the arguments already so saying ... = [ @found_files ]; would do too but do extra needless copying.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://951590]
Approved by GrandFather
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (5)
As of 2018-03-22 02:21 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (272 votes). Check out past polls.