我试图解析其中一个网站,同时我需要传递
$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.
答案 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语法用于引号。如果我弄错了,我相信有人会纠正我。