Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Autosplit-Mode and $F[6] vs @F[6]

by strat (Canon)
on Feb 20, 2003 at 23:35 UTC ( #237273=perlquestion: print w/ replies, xml ) Need Help??
strat has asked for the wisdom of the Perl Monks concerning the following question:

Dear monks,

every time I use a perl-onliner with -ane and @F, I wonder why I can't access a single column of the input file with $F[6] (which contains undef) but have to use @F[6] and will get warned if I enable warnings about like the following way:

Scalar value @F[6] better written as $F[6] at -e line 1.

An example code may be:

perl -0012 -ane "print join(' => ',@F[8,6]),qq~\n~ if @F[6]=~/cmd\.exe +/" access.csv;
For input file, I used an apache access-log where the spaces were replaced by a tab as separator.

Do you know the reason for this strange behaviour?

Best regards,
perl -e "s>>*F>e=>y)\*martinF)stronat)=>print,print v8.8.8.32.32.32"

Comment on Autosplit-Mode and $F[6] vs @F[6]
Select or Download Code
Re: Autosplit-Mode and $F[6] vs @F[6]
by Aristotle (Chancellor) on Feb 20, 2003 at 23:59 UTC
    I don't recall something like that and a quick test shows I cannot reproduce your problem. Are you sure @F really contains what you think it does and where you think it does?

    Makeshifts last the longest.

@F[6] vs. $F[6] - The Wrong Answer
by Elgon (Curate) on Feb 21, 2003 at 00:01 UTC

    Hi Strat,

    What is happening here is related to the way that Perl looks at individual values (scalars) and lists of values (arrays.) When you are referring to the whole list, stored in @F, say in a foreach loop...

    foreach $_(@F) # For each value in the list called @F { # Do stuff... }
    ...then you should use the @ prefix but when you want a single, discrete value within @F, such as $F[6], say in the following if clause...
    if ($F[6]) # If the seventh individual value in @F is true { # Do stuff }

    ...then you should use $F[6]. Essentially, if you're trying to access a single value then you'll want $, a list of values @ and a hash of key/value pairs %. Type "perldata" into the search box at the top of any perlmonks page and hit the search button. This should explain all you wish to know.

    Elgon

    Update : Apologies to all concerned, I completely misread the question in my eagerness to provide an answer. Please ignore the above. *Goes very red*

    "What this book tells me is that goose-stepping morons, such as yourself, should read books instead of burning them."
           - Dr. Jones Snr, Indiana Jones and the Last Crusade]

      If you read his post carefully you'll find he actually does know this.

      Makeshifts last the longest.

Re: Autosplit-Mode and $F[6] vs @F[6]
by xmath (Hermit) on Feb 21, 2003 at 00:57 UTC
    Hahaha, it took me a while to realize it...

    It's not perl, it's your shell! Commandline argument strings in double-quotes undergo variable substitution by the shell. :-D

    The solution:

    perl -0012 -ane 'print join(" => ",@F[8,6]),"\n" if $F[6]=~/cmd\.exe/' + access.csv

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (8)
As of 2014-08-31 02:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (294 votes), past polls