2012-02-17 6 views
0

の引数の各単語をループする:私は私のような何かを呼び出すことができますPerlプログラムしたいのですがどのようにperlの

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

そして、perlはこの中で、端末への出力を印刷持ってしフォーマット

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

は、私は通常、C/C++/Javaプログラマだけど、私は最近、perlのを見てきた、と私はそれを測深することはできません。

+0

perlに分割機能がありますか? – Mat

答えて

4

Getopt::Longおよびsplitを使用してください。

#!/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, $_); 
} 
+0

ありがとう、これは私が必要とするものです – stormCloud

1

perldoc split()をご覧ください。

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

編集は:split呼び出しの周りに括弧を追加しました。

+0

"$ word split"の近くの-e行1で構文エラーが発生する – zgpmax

+0

Hochgurgler:注意してくれてありがとう。答えを編集しました。 – tripleee

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"; 
} 

(私は質問が元々各ラインで上昇値を発するという点で囲まれたという理由だけでインデックスを使用して、アレイ上で繰り返してきた通常私達はちょうどforを使用したいと思います。またはforeach直接リストを反復処理するよう呼び出す)

:。

perl test.pl ' This is a sentence ' 

プリント:

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

二重ダッシュの長いオプション名の入力を明示的に取りたい場合は、Quentinの説明に従ってGetopt :: Longを使用します。

関連する問題