2

読んでくれてありがとう。

wgetのシェルコマンドの場合、次のように機能します。

wget -q -O - http://www.myweb.com | grep -oe '\w*.\w*@\w*.\w*.\w\+' | sort -u

ただし、そのコマンドをPerlプログラム内に挿入しようとすると、「演算子が期待される場所に円記号が見つかり、演算子が期待される場所に円記号が見つかりました」という構文エラーが発生します。そこで、正規表現を囲む引用符をこの{}に置き換えましたが、コメントアウトするのと同じように、エラーは発生しませんが、正規表現がそうではないかのように、中括弧は明らかに間違った試み。

これはコードであり、foreach内にあります。

foreach(@my_array) {

$browser->get($_);
# and here below is where the error comes
system ('wget -q -O -"$_" | grep -oe '\w*.\w*@.\w*.\w\+' | sort -u');

正規表現を囲む一重引用符を{}に置き換えると、wgetはURLを取得しますが、grepコマンドは機能しません。

これが問題です。構文を煩わせる引用符を解決する方法

4

2 に答える 2

4

'システムコールで一重引用符を使用しています。彼らはあなたのために変数を記入しません。は$_交換されていません。また、横にある一重引用符は、grepこの無効な構文を作成します。

代わりにこれを試してください:

system ("wget -q -O - $_ | grep -oe '\w*.\w*\@.\w*.\w\+' | sort -u");

qq演算子を使用することもできます:

system ( qq( wget -q -O - $_ | grep -oe '\w*.\w*\@.\w*.\w\+' | sort -u) );

また、perlopを見てください。


別の考え: URLを取得$browserできるオブジェクトがある場合get()、なぜ使用する必要があるのwgetですか?Perlでもこれを行うことができます。

于 2012-06-22T14:26:29.877 に答える
2

あなたはこれを求めている:

system ("wget -q -O -\"$_\" | grep -oe '\\w*.\\w*@.\\w*.\\w\\+' | sort -u");

好きなものを二重引用符で囲むことができます。特定の文字をエスケープする必要があるだけです。

ちなみに、Perlのqq()演算子はあなたに興味があるかもしれません。あなたはそれを調べることができます。

于 2012-06-22T14:24:29.937 に答える