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

export variable outside foreach

by mitchreward (Acolyte)
on Jun 19, 2014 at 08:21 UTC ( #1090417=perlquestion: print w/replies, xml ) Need Help??
mitchreward has asked for the wisdom of the Perl Monks concerning the following question:

Hi guys,

Am pretty new to perl and wanted to export the last value of $last. But it doesn't work. Could you help?

ps: I just wanted to make the equivalent of a Unix "tail -1"

use CGI qw(:standard); use strict; use utf8; my $srce = "/some/file"; my $string1 = "some-regex"; my $last; open my $fh, $srce or die "Could not open $scre: $!"; my @lines = grep /\Q$string1/, <$fh>; foreach my $line (@lines) { my @fields = split /\s+/, $line; $last= $fields[3]; } print "$last";

Replies are listed 'Best First'.
Re: export variable outside foreach
by Eily (Parson) on Jun 19, 2014 at 08:38 UTC

    What do you mean by "it doesn't work" ? Does it print something wrong, or nothing at all? See How do I post a question effectively?

    Since you have replaced your values and have not given any sample data, I can't tell if this is on purpose but in /\Q$string1/ $string1 is interpreted as a literal string, not a regular expression. This means for example that "a*" will match "a*b+c" and not "aaaaaaa". To have your string interpreted as a regex, do not use \Q

Re: export variable outside foreach
by Anonymous Monk on Jun 19, 2014 at 08:29 UTC
    sure it does ... if $last is empty then @fields was empty or @lines is empty

      perl -w

      Global symbol "$scre" requires explicit package name at line 12.

      Execution of aborted due to compilation errors.
        Is that a question? :D Fix your typo, copy the varible name, ctrl+f, paste variable name, enter, find the typo, fix it


        He meant that $srce is not the same as $scre.


        When your only tool is a hammer, all problems look like your thumb.

      @lines being empty seems unlikely, since it was grepped out of the file. @fields may not contain four fields though (Edit: whoops, @lines, can be empty, is just can't contain empty strings unless $string1 is empty)

      mitchreward, have a look at Data::Dumper. If you use Data::Dumper; and then add print Dumper \@fields; to your loop you may have more information on what is happening.

      Edit: the code you provided does compile, so you have removed the error by changing it.

        @lines being empty seems unlikely, since it was grepped out of the file.

        I don't understand this point. Why would grep-ing the contents of the file make it likely that the  @lines array must contain something? (Or does this refer to a previous version of the posted code that was changed without citation?)

Re: export variable outside foreach
by philipbailey (Chaplain) on Jun 19, 2014 at 15:36 UTC

    Perhaps your input file has a final line consisting of a newline only, or line that has no fourth field? That would give the behaviour you describe.

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (2)
As of 2018-01-17 15:43 GMT
Find Nodes?
    Voting Booth?
    How did you see in the new year?

    Results (201 votes). Check out past polls.