タイトルの通り - 次のスクリプトがどのように機能するかを誰か説明してください
これはテキストを出力します:
''=~('(?{'.('])@@^{'^'-[).*[').'"'.('-[)@{:__({:)[{(-:)^}'^'}>[,[]*&[[[[>[[@[[*_').',$/})')
これは「b」のみを出力します
use strict;
use warnings;
''=~('(?{'.('_/).+{'^'/]@@_[').'"'.('=^'^'_|').',$/})')
perl -MO=Deparse はこれだけを示します:
use warnings;
use strict 'refs';
'' =~ m[(?{print "b",$/})];
しかし、理由がわかりません... ;(
スクリプトのように分解する推奨される方法は何ですか? 始める方法は?
だから、これを試しました:
'' =~
(
'(?{'
.
(
'])@@^{' ^ '-[).*['
)
.
'"'
.
(
'-[)@{:__({:)[{(-:)^}' ^ '}>[,[]*&[[[[>[[@[[*_'
)
.
',$/})'
)
によっていくつかの部分が連結され.
ます。そして、ビットごとの結果は^
おそらくテキスト部分を与えます。:
perl -e "print '-[)@{:__({:)[{(-:)^}' ^ '}>[,[]*&[[[[>[[@[[*_'"
「Perl の連中は賢い」と最初に^
生成された「print」を出力します。
しかし、いつ、私はそれを次のように書き直します:
'' =~
(
'(?{'
.
(
'print'
)
.
'"'
.
(
'Perl guys are smart'
)
.
',$/})'
)
私のperlは私に言った:
panic: top_env
奇妙な、初めてエラーメッセージのようなものを見た...
'str1' ^ 'str2'
つまり、を ,に置き換えることは許可されてresult
いません (理由がわかりません)。なぜ perl はパニック メッセージを出力するのですか?
私のパール:
This is perl 5, version 12, subversion 4 (v5.12.4) built for darwin-multi-2level
Ps: 例はここで生成されます