4

私はPerlで次のコードを持っています:

if (index ($retval, $_[2]) != -1) {
    @fs = split ($_[2], $_[1]);

$_[2]はデリミタ変数で、$_[1]はデリミタが存在する可能性のある文字列です。 ($_[0]は別の場所で使用されています) これらの変数名から、このコードがサブルーチンにあると推測したかもしれません。

とにかく、私の質問に、区切り文字が無害なものである'a'':'、コードが正常に機能する場合です。ただし、文字のように Perl 正規表現によって解析されるものである場合、'\'想定どおりに機能しません。これは、分割関数で Perl が次のように表示されるため、理にかなっています。

split (/\/, $_[1]); 

これは、これが必要なため、まったく意味がありません。

split (/\//, $_[1]);

$_[2]そのすべてを念頭に置いて、私が答えることができない私の質問は次のとおりです。別のものと解釈されませんか?」

前もって感謝します、

ロバート

4

3 に答える 3

13

You can use quotemeta to escape $_[2] properly so it will work in the regex without getting mangled. This should do it:

my $quoted = quotemeta $_[2];
@fs = split( $quoted, $_[1] );

Alternatively, you can use \Q in your regex to escape it. See "Escape Sequences" in perlre.

于 2009-04-15T22:47:02.830 に答える
6
split /\Q$_[2]/, $_[1]
于 2009-04-15T22:46:46.030 に答える
1

補足として、変数$_[1]$_[2]変数が自動的に渡され@_たサブルーチンの配列を参照していると思われます。

それは役に立ちます - ここでの説明をかなり省き、コード自体をより理解しやすくするでしょう - そして、サブの冒頭で次のようなものを使用するのが一般的な方法です:

sub mysub {
  my ($param1, $string, $delim) = @_;
  # ...
}
于 2009-04-16T09:50:47.400 に答える