Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

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 taking refuge in the Monastery: (5)
As of 2017-12-16 11:12 GMT
Find Nodes?
    Voting Booth?
    What programming language do you hate the most?

    Results (450 votes). Check out past polls.