3

私はコメントされていない perl コードに取り組んでいます。perl 初心者の私にはあまりにも perl っぽい一節に出くわしました。これは単純化された適応です:

my $foo;
my $bar = "x|y|z|";

$bar =~ s{\|$}{};
($foo = $bar) =~ s{ }{}gs;

$bar =~ s{\|$}{}中の文字列に右の正規表現を当てはめていることがわかりました$bar。しかし、その表現は何を($foo = $bar) =~ s{ }{}gs;意味するのでしょうか。私は正規表現について尋ねているのではなく、それが適用されている表現について尋ねています。

4

3 に答える 3

5

かっこが指示する優先順位に従って、各ステートメントを一度に 1 つずつ解決します。

($a = $b) =~ s{ }{}gs;
#^^^^^^^^--- executed first
($a = $b)        # set $a to the value contained in $b
$a =~ s{ }{}gs;  # perform the regex on $a

グローバル修飾子により、正規表現は/g可能な限り多く一致します。/s修飾子により、ワイルドカード.も改行に一致します (したがって、実際にはすべてに一致します)。この/s正規表現にはワイルドカードがないため、修飾子は冗長です.

$aとは、$bによって使用される事前に宣言された変数であり、使用sortを避ける必要があることに注意してください。

疑わしい場合は、いつでも変数を出力して、それらがどのように変化するかを確認できます。例えば:

use Data::Dumper;
my $x = 'foo bar';
(my $y = $x) =~ s{ }{}gs;
print Dumper $x, $y;

出力:

$VAR1 = 'foo bar';
$VAR2 = 'foobar';
于 2013-09-26T13:38:21.917 に答える
4

スカラー コンテキストでのスカラー代入は、左側のオペランドを返します (ここに示すように)。つまり

$a = $b

の値を に代入し$b$aを返します$a。つまり

($a = $b) =~ s{ }{}gs;

の略です

$a = $b; $a =~ s{ }{}gs;

そして切望する

$a = $b =~ s{ }{}gsr;  # Requires 5.14+
于 2013-09-26T13:41:53.400 に答える
1

しかし、式 ($a = $b) =~ s{ }{}gs; は何をしますか? 平均?

と同じです

$a = $b;
$a =~ s{ }{}gs;

s{ }{}gs区切り文字としての置換s/ //gs正規表現です{}

于 2013-09-26T13:38:47.610 に答える