in reply to Re: Subroutine question
in thread Subroutine question

my $arg1 = "foo"; my $file1 = "file_1.gz; my $arg2 = "bar"; my $file2 = "file_2.gz"; sub file_processing { $script = "/export/home/ssesar/Perl/another_script.pl"; $open = "$script -e $arg1 $file1"; open(FILE1, "$open |") or die "can't do it\n"; while (<FILE1>) { chomp; next if /^\#/; next if /None/; next if /Unkno/; next if /unkno/; next if /NONE/; @_ = split ( /\n/, $_); @array1 = @_; } close FILE1; }
1.I want this subroutine to be run as it reads
2. Then, I want this subroutine to be run a second time with the follo +wing changes: <CODE> $open = "$script -e $arg2 $file2"; open(FILE2, "$open |") or die "can't do it\n"; while (<FILE2>) {
and...
@array2 = @_;

Replies are listed 'Best First'.
RE: RE: Re: Subroutine question
by jreades (Friar) on Sep 21, 2000 at 07:49 UTC

    Right, here's what we're saying:

    my @array1; my @array2; my @args = ( [ \@array1, "foo", "file_1.gz"], [ \@array2, "bar", "file_2.gz"] ); foreach (@args) { &file_processing($args->[0], $args->[1], $args->[2]); } sub file_processing { my ($array_ref, $arg, $file) = @_; my $script = "/export/home/ssesar/Perl/another_script.pl"; open(FILE, $script . ' ' . $arg . ' ' . $file . ' |') or die ("c +an't do it: $!\n"); while (<FILE>) { chomp; push @{$array_ref}, $_ unless /^(?:\#|none|unknow)/i; } close FILE; }

    This should do what you want as best as I can tell -- open a file and push into an array (either array 1 or array 2 depending on which iteration) any line that doesn't start with UNKNOW/unknow/#/NONE/none.

    Your lines

    @_ = split ( /\n/, $_); @array1 = @_;

    look very strange -- as someone else pointed out, if you're reading in the file line by line (which is what <FILE> implies) then the final split on \n is useless.

    In addition, you're only assigning the last value of @_ to @array1 (meaning the other values are lost) unless you've undefined $/, in which case you should just use my $file = <FILE> rather than the while loop.

    Hope this helps.