input to the program with all the strings in an array one by one

落爺英雄遲暮 提交于 2019-12-18 07:25:18

问题


I have a shell script consisting of so many perl scripts, one of the perl script have to be run with differnt input each time and the value has to be stored in a single file at the end as shown

 #!/bin/sh
 .....
 ....
 perl test.pl apple
 perl test.pl mango
 perl test.pl banana
 ... 
... 
....

I type these names in command lines by looking at the file generated with these names.

**names.txt**
apple
mango
banana

OR

**names.txt**
    apple    mango   banana

Is their a way in perl or shell which takes each name at a time as an input.
That is can names.txt be considered as an array and then the perl script take each array value at a time as an input using ARGV or any other means.So that i can have my shell script like

#!/bin/sh
     .....
     ....
     perl test.pl names.txt
     .... 
    ... 
    ....

回答1:


The usual way to write perl programs that take input from files is to construct them as follows:

while ($line = <>) {

    # do stuff with $line
}

If filenames are given on the command line, perl will automatically open them one by one, feeding the lines to your script. If no filenames are given, it will read from standard input.

But if you write your script this way, you won't be able to give it fruits directly on the command line, they will have to be in a file or standard input.

To handle multiple fruit on the same line, your code can do:

while (my $line = <>) {

    chomp $line;

    foreach my $fruit ( split ' ', $line ) {

        # do something with $fruit
    }
}



回答2:


In bash, line by line:

while read fruit
do
  perl test.perl "$fruit"
done < names.txt


来源:https://stackoverflow.com/questions/12242557/input-to-the-program-with-all-the-strings-in-an-array-one-by-one

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!