2

2つのコードがあります。最初のものは私が欲しかったものです。しかし、なぜ2番目は「johnchrismandy」ではなく1と0(私の英語は正しいか、「1と0」)を与えているのですか。


foreach (@data) {
    print ;
}
//output
john
chris
mandy


foreach  (@data) {
    print chomp ;
}
//output
110

UPDATE:: Thank you guys, I understand it more now. But I don't understand the last part of the doc.

=> You can actually chomp anything that's an lvalue, including an assignment: chomp($cwd = pwd);

4

4 に答える 4

6

これは文書化された動作です:「すべての引数から削除された文字の総数を返します。」あなたが欲しい

for (@data) {
   chomp;
   print "$_\n";
}

$_はの要素にエイリアスされている@dataため、変更されることに注意してください@data。あなたがそれを起こしたくないのなら。

for (@data) {
   my $item = $_;
   chomp($item);
   print "$item\n";
}

ドキュメントの最後の行について:

my $item = $_;左辺値(代入の左辺$itemに適した値)として返されます。そのような、

my $item = $_;
chomp($item);

次のように書くことができます

chomp( my $item = $_ );
于 2012-09-02T19:07:24.800 に答える
1

これは、chomp関数の戻り値を出力しており、これがすべての引数から削除された文字の総数であるためです。

于 2012-09-02T19:06:27.110 に答える
1

chompは、削除された文字の総数を返します。

したがって、\n削除した数を出力します。

次の方法で行います。

foreach  (@data) {
    chomp($_);
    print $_;
}
于 2012-09-02T19:06:57.413 に答える
0

他の人が述べているように、chompは削除された文字数を返します。私の特定の例(1行のperl replace-in-fileステートメントでeval修飾子を使用した正規表現)では、個別のprintステートメントを使用せずに、単一のステートメントでchomped値を取得する必要がありました。私はついに実用的な解決策を見つけました-ifステートメントでchompコマンドをラップします。

で始まります:

$in = "I have COMMITS commits in my log";
$in =~ s/COMMITS/`git log | grep -i '^commit' | wc -l`/e;
print $in;

これは次を返します:

I have 256
 commits in my log

素晴らしい、私はこれを切り刻む必要があるので、私は試してみます:

$in = "I have COMMITS commits in my log";
$in =~ s/COMMITS/chomp `git log | grep -i '^commit' | wc -l`/e;
print $in;

しかし、これはエラーをスローします:

Can't modify quoted execution (``, qx) in chomp at ./script line 4, near "`git log | grep -i '^commit' | wc -l`}"
Execution of ./script aborted due to compilation errors.

ええ、それで私は出力をローカル変数に割り当ててそれを切り刻む必要があります:

$in = "I have COMMITS commits in my log";
$in =~ s/COMMITS/chomp (my $VAR = `git log | grep -i '^commit' | wc -l`)/e;
print $in;

しかし、前述したように、chompは削除された文字数を返します。

I have 1 commits in my log

次に、それをifステートメントでラップして、結果を返すようにすることができることがわかりました。

$in = "I have COMMITS commits in my log";
$in =~ s/COMMITS/if (chomp (my $VAR = `git log | grep -i '^commit' | wc -l`)) { $VAR }/e;
print $in;

最後に、1つのステートメントでコマンド結果を取得します。

I have 256 commits in my log
于 2013-04-01T21:24:01.183 に答える