2011-10-25 7 views
1

私はシェルにはないので、あなたはおそらく、URLの周りに引用符を配置する必要があり渡すコマンドライン引数それが

$url="http://www.hotels.com/search/search.html?destinationName=Dallas%2C+Texas%2C+United+States&arrivalDate=10%2F27%2F11&departureDate=10%2F31%2F11&numberOfRooms=1&numberOfAdults=1"; 
system("perl x.pl $url"); // this is giving me error because the $url consists of dot operator. 
+5

ええ、そうではありません。 –

+4

なぜPerlの 'system'を使って別のPerlスクリプトを実行していますか? –

+2

@BenVoigt:どうしてですか?これは、Perlスクリプトから他のコマンドを呼び出すようなものです。 (あなたはおそらく 'x.pl'を呼び出したスクリプトに組み込むことができますが、それは必ずしも最良の解決策ではありません。) –

答えて

1

を渡す必要がありそうしながら、Webサイトのいずれかを解析しようとしていた中でのドット演算子それを解釈しようとする。

system("perl x.pl \"$url\""); 

または任意のPerlの構文は引用符のためにあるようなものを試してみてください。私はそれが間違っている場合誰かが私を修正すると確信しています。

+1

マイク - あなたが正しく推測している間に、正しいことを知らない答えを投稿するのは無礼です。 Perlで引用符をエスケープすることについて十分に分かっていない場合は、投稿しないか、研究を行った後にグーグルとポストを1〜5分費やしてください。 – DVK

+2

マイク、あなたは正しいです。一重引用符を使用することもできます: 'system(" perl x.pl '$ url' ");'。または(IMHO)より良い解決策の私の答えを参照してください。 –

+0

+1は反対の投票に反対します。 – tripleee

7

system()のから多引数が、この場合には優れている:あなたは(スペースを含む)任意のシェルのメタ文字が含まれていsystem()単一の文字列を渡す場合

system('perl', 'x.pl', $url); 

、それは(少なくとも上の/bin/shを経由して、それを起動しますUnixのようなシステム) - つまり、&文字のようなものは(@MikePlayleが示唆するように)あなたがそれを引用しない限り、シェルによって解釈されることになります。

しかし、system()に複数の引数を指定すると、シェルをバイパスして、最初の引数で指定されたコマンドを直接実行し、他の引数を渡します。

あなたはシェルがメタ文字を処理したい場合、単一の引数形式が有用である - 例えば、あなたはI/O用(パイプを含む)リダイレクションおよび/またはワイルドカード拡張を行いたい場合は、行うことができること、物事Perlでは、しかしもう少し努力しています。

perldoc perlfuncや詳細については、「システム」を検索、またはsee here

+0

'system'だけが常にマルチarg形式で動作し、別の組み込み(' shell')がシェルコマンドを実行した場合とにかく、[IPC :: System](http://search.cpan.org/perldoc?IPC::System)の関数は自動的にエラーチェックを処理するので、代わりに 'systemx'を使います。 – ikegami

+0

@ikegami:下位互換性は厳しい愛人です。 –