sub my_sub {
my $str = shift;
$str =~ s/some/regex/;
return $str;
}
このような単純なサブルーチンには 5 行は長すぎます。中間変数を使用しないなど、単純化できますか?
sub my_sub {
my $str = shift;
$str =~ s/some/regex/;
return $str;
}
このような単純なサブルーチンには 5 行は長すぎます。中間変数を使用しないなど、単純化できますか?
中間変数なしで 1 行短い:
sub my_sub {
$_[0] =~ s/some/regex/;
return $_[0];
}
編集: @pavel が指摘したように、これにより元の変数が変更されます。
Perl 5.13.2から、正規表現が操作する変数を変更しない非破壊修飾子/r
(参照についてはperlopを参照) があります - これにより、別の行を削除することもできます:
sub my_sub {
return $_[0] =~ s/some/regex/r;
}
sub my_sub {
(my $str = shift) =~ s/some/regex/;
$str;
}
単純な置換にはそう長くはかかりません。また、データのコピーを作成し、そのコピーを置き換え、元のデータをそのままにして、変更されたコピーを返します。したがって、次のように使用します。
my $modified = my_sub( $original );
一部の回答は$_[0]
、 の最初の項目である で機能し@_
ます。これは、元のデータの別名です。このように、Perl は、別のコピーが実際に必要であることを認識するまで、データをコピーする必要はありません。エイリアスで置換を行うと、オリジナルが変更されます。これを行うことは、オリジナルを変更して元に戻すことに似ています。
$original = my_sub( $original );
ただし、質問は短くすることです。それは通常、何かをするのに十分な理由ではありません。これはサブルーチンなので、必要に応じて好きなだけ放っておいてください。この種のコードを設計する前に、要件を把握してください。