1
sub my_sub {
    my $str = shift;
    $str =~ s/some/regex/;
    return $str;
}

このような単純なサブルーチンには 5 行は長すぎます。中間変数を使用しないなど、単純化できますか?

4

3 に答える 3

9

中間変数なしで 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;
}
于 2012-08-26T12:14:15.520 に答える
3
sub my_sub {
    (my $str = shift) =~ s/some/regex/;
    $str;
}
于 2012-08-26T13:28:03.257 に答える
1

単純な置換にはそう長くはかかりません。また、データのコピーを作成し、そのコピーを置き換え、元のデータをそのままにして、変更されたコピーを返します。したがって、次のように使用します。

 my $modified = my_sub( $original );

一部の回答は$_[0]、 の最初の項目である で機能し@_ます。これは、元のデータの別名です。このように、Perl は、別のコピーが実際に必要であることを認識するまで、データをコピーする必要はありません。エイリアスで置換を行うと、オリジナルが変更されます。これを行うことは、オリジナルを変更して元に戻すことに似ています。

 $original = my_sub( $original );

ただし、質問は短くすることです。それは通常、何かをするのに十分な理由ではありません。これはサブルーチンなので、必要に応じて好きなだけ放っておいてください。この種のコードを設計する前に、要件を把握してください。

于 2012-08-27T11:58:06.883 に答える