如何遍历perl参数中的每个单词

时间:2012-02-17 11:28:45

标签: perl command-line-arguments

我想要一个perl程序,我可以通过以下方式调用:

perl myProgram --input="This is a sentence"

然后让perl以这种格式将输出打印到终端

word1 = This
word2 = is
word3 = a
word4 = sentence

我通常是一名c / c ++ / java程序员,但我最近一直在关注perl,我无法理解它。

3 个答案:

答案 0 :(得分:4)

使用Getopt::Longsplit

#!/usr/bin/perl

use strict;
use warnings;
use Getopt::Long;

my $input = '';
GetOptions( 'input=s' => \$input );

my $count = 0;
for (split ' ', $input) {
        printf("word%d = %s\n", ++$count, $_);
}

答案 1 :(得分:1)

请查看perldoc split()。

foreach my $word (split (/ /, 'This is a sentence'))
{
     print "word is $word\n";
}

修改:围绕split来电添加了括号。

答案 2 :(得分:1)

'split'不处理多余的前导,尾随和嵌入空格。最好的选择是重复匹配非空格字符m{\S+}gso

第一个命令行参数是$ARGV[0]。把它们放在一起我们有:

#! /usr/bin/perl

use strict;
use warnings;

my @words = $ARGV[0] =~ m{\S+}gso;

for (my $i = 0; $i < @words; $i++) {
    print "word", $i + 1, " = ", $words[$i], "\n";
}

(我仅使用索引迭代数组,因为问题最初的框架是每行发出一个上升值。通常我们只想使用forforeach直接迭代列表。)

呼叫:

perl test.pl ' This  is  a  sentence '

打印:

word1 = This
word2 = is
word3 = a
word4 = sentence

如果您明确想要获取双短划线选项名称的输入,请使用Quentin所描述的Getopt :: Long。