なぜかわからないけど、それは初心者がPerlによく使うパターンです。それは通常あなたが投稿したスニペットにあるように無駄ですが、私は2つの用途を考えることができます。
オリジナルと同じ値の新しい文字列を作成するという効果があり、非常にまれな状況で役に立ちます。
次の例では、サブがその引数を変更するため、$ xがサブの変更から保護されるように、明示的なコピーが行われます。
$ perl -E'
sub f { $_[0] =~ tr/a/A/; say $_[0]; }
my $x = "abc";
f($x);
say $x;
'
Abc
Abc
$ perl -E'
sub f { $_[0] =~ tr/a/A/; say $_[0]; }
my $x = "abc";
f("$x");
say $x;
'
Abc
abc
文字列のコピーを作成することによって、オブジェクトを文字列化します。これは、引数が参照であるかどうかに基づいて動作を変更するコードを処理する場合に便利です。
次の例では、 @
での参照を文字列とは別の方法で処理するため、 require
$ perl -MPath::Class=file -E'
BEGIN { $lib = file($0)->dir; }
use lib $lib;
use DBI;
say "ok";
'
Can't locate object method "INC" via package "Path::Class::Dir" at -e line 4.
BEGIN failed--compilation aborted at -e line 4.
$ perl -MPath::Class=file -E'
BEGIN { $lib = file($0)->dir; }
use lib "$lib";
use DBI;
say "ok";
'
ok