Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

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/Module.pm line 94.

Comment on Push from filefind into structure
Select or Download Code
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?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://951590]
Approved by GrandFather
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (5)
As of 2015-07-07 10:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (88 votes), past polls