传递包含点运算符的命令行参数

时间:2011-10-25 04:27:34

标签: linux perl

我试图解析其中一个网站,同时我需要传递

$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.

2 个答案:

答案 0 :(得分:7)

system()的多参数在这种情况下更好:

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

当您传递system()包含任何shell元字符(包括空格)的单个字符串时,它会通过/bin/sh(至少在类Unix系统上)调用它 - 这意味着像&字符将由shell解释,除非(如@MikePlayle建议的那样)引用它。

但是当你赋予system()多个参数时,它会绕过shell并直接执行第一个参数中命名的命令,并将其传递给其他参数。

当你希望shell处理元字符时,单参数形式很有用 - 例如,如果你想进行I / O重定向(包括管道)和/或通配符扩展,可以 em>可以在Perl中完成,但需要付出更多努力。

perldoc perlfunc并搜索“system”以获取更多信息,或see here

答案 1 :(得分:1)

您可能需要在URL周围加上引号,以便shell不会尝试解释它。

尝试类似

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

或者Perl语法用于引号。如果我弄错了,我相信有人会纠正我。