jerrygarciuh has asked for the wisdom of the Perl Monks concerning the following question:

Greetings Monks!
I come again seeking wisdom. This code takes the @a and if the contents match a key in the hash %list it pushes the value of the key into my output array, if there is no match it pushes the original input. Works fine until I change line 3 to my @a=<STDIN>; and add chomp (@a); The changes result in an empty array being returned. Can someone tell me why my input from STDIN would look different than the same input from the array, considering that I do chomp it?
TIA
jg
#!/usr/local/bin/perl -w use strict; my @a=(1..99); my (@names,@name_nums); @names=name_nums(@a); print "@names"; sub name_nums { my (%list,@name_nums,$this_num, @input); @input=@_; @list{1..9}=qw(one two three four five six seven eight nine); foreach (@input){ if (exists $list{ $_ }){ push @name_nums, $list{ $_ }; }else{ push (@name_nums,$_); } } return @name_nums; }
_____________________________________________________
Ain't no time to hate! Barely time to wait! ~RH

edit - Petruchio Mon Oct 1 00:04:27 UTC 2001: Minor Formatting adjustments.

Replies are listed 'Best First'.
Re: Change from @a=(1..99) to @a=\STDIN\ = problems
by TStanley (Canon) on Oct 01, 2001 at 03:00 UTC
    I am assuming you are trying to take input in from the command line, in which case, you need to change line 3 to the following:
    my @a=@ARGV;

    The @ARGV variable contains all of the command line arguments that are passed to the script, so if you called your script like this:
    perl myscript.pl 1 15 5 7 3 99

    You would find that $ARGV[0] would be "1", $ARGV[1] would be "15", and so on.

    TStanley
    --------
    There's an infinite number of monkeys outside who want to talk to us
    about this script for Hamlet they've worked out
    -- Douglas Adams/Hitchhiker's Guide to the Galaxy
Re: Change from @a=(1..99) to @a=\STDIN\ = problems
by tommyw (Hermit) on Oct 01, 2001 at 02:59 UTC

    What are you supplying to STDIN? The only reason for any different output is because of different input.

    Changing my @a=(1..99); to my @a=<STDIN>; chomp @a; made no difference to my results.

    For your reference, I ran...

    perl jc.pl one two three four five six seven eight nine 10 11 12 13 14 15 16 17 1 +8 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 4 +1 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 6 +4 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 8 +7 88 89 90 91 92 93 94 95 96 97 98 99 emacs -nw jc.pl perl -e 'print $_, "\n" for (1..99)' > a perl jc.pl &lt; a one two three four five six seven eight nine 10 11 12 13 14 15 16 17 1 +8 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 4 +1 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 6 +4 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 8 +7 88 89 90 91 92 93 94 95 96 97 98 99
    Hopefully, there's a difference between my commands and yours, and this difference is obvious?

    Your input file does consist of exactly

    1 2 3 etc...
    right? With each number on a line of its own, and no leading or trailing spaces?

    edit - Petruchio Mon Oct 1 00:14:06 UTC 2001: Replaced PRE tags with CODE tags.