23

Perl (dot-equals) で「.=」とはどういう意味ですか? 以下のコード例 (while 句内):

if( my $file = shift @ARGV ) {
    $parser->parse( Source => {SystemId => $file} );
} else {
    my $input = "";
    while( <STDIN> ) { $input .= $_; }
    $parser->parse( Source => {String => $input} );
}
exit;

洞察をありがとう。

4

4 に答える 4

29

ピリオド.連結演算子です。右側の等号は、これがC のような代入演算子であることを意味します。

例えば:

$input .= $_;

と同じです

$input = $input . $_;

ただし、これにはいくつかの perl マジックもあります。たとえば、これにより、「初期化されていない」警告を回避するために変数を初期化する必要がなくなります。違いを試してください:

perl -we 'my $x; $x = $x + 1'   # Use of uninitialized value in addition ...
perl -we 'my $x; $x += 1'       # no warning

これは、コード内の行が次のことを意味します。

my $input = "";

かなり冗長です。とはいえ、それが心地よいと感じる人もいるかもしれません。

于 2013-01-21T17:55:56.407 に答える
8

ほとんどすべての二項演算子Xの場合、$a X= $bはと同等$a = $a X $bです。ドット.は文字列連結演算子です。したがって、 「の終わりに$a .= $b固執する」を意味します。$b$a

コードでは、空から始めて、行を繰り返し読み取り、行がなくなるまで$input追加します。$inputファイル全体が$input、一度に1行ずつの内容になるはずです。

ループレスと同等である必要があります

local $/;
$input = <STDIN>;

(行区切り文字を未定義の文字として定義し、「行の終わり」が来るまで読みます)。

編集:TLPのコメントに従って変更されました。

于 2013-01-21T17:44:00.260 に答える
5

文字列連結演算子が見つかりました。

試してみよう :

my $string = "foo";

$string .= "bar";

print $string;
foobar
于 2013-01-21T17:43:30.173 に答える
1

これにより、$input 変数への連結が実行されます。STDIN 経由で入ってくるものはすべて $input に割り当てられます。

于 2013-01-21T17:49:40.513 に答える