【问题标题】:Perl wget quotes syntax issuePerl wget引号语法问题
【发布时间】:2012-06-22 22:31:41
【问题描述】:

感谢您的阅读。

对于 wget 的 shell 命令,类似这样的工作:

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 命令不起作用。

这就是问题所在,如何解决烦人语法的引号

【问题讨论】:

    标签: perl wget


    【解决方案1】:

    您在系统调用中使用了单引号 '。他们不会为您填写变量。 $_ 没有被替换。此外,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.


    另一个想法:如果你有$browser 对象可以get() url,为什么需要使用wget?您也可以在 Perl 中执行此操作。

    【讨论】:

    • 这个答案不错,但wget -q -0 - "foo bar"wget -q -0 - foo bar 不太一样。 OP不想保留引号吗?此外,至少在我的 Perl 解释器上,不转义反斜杠似乎不起作用,即使这样做,在我看来也会代表糟糕的风格。
    • 两个答案都是正确的,都值得称赞,我怎么能相信你们两个?
    • 谢谢,谢谢。我刚刚检查了反斜杠。由于 OP 不使用 \n 等,因此无需转义即可工作。我同意如果他们逃脱了会更清楚。我把它留了下来,以免弄乱。关于单引号,在命令行示例中它们不存在。我假设 OP 将它们放在 perl 代码中,因为他认为这会使它填充变量。
    • @thb 。好吧,wget 在整个网站上进行递归搜索。只是,我不想下载网站,我只想要 grep 得到的东西。我不知道如何使用 Perl 递归遍历目录
    • @thb ,或者换一种说法,让 wget 扫描网络所需要做的就是 -r,这就是为什么我认为它比使用 Perl 更容易,但尽管我我是爱好者,离专家还很远。
    【解决方案2】:

    你想要这个:

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

    你可以在双引号中包含你喜欢的内容,只是你必须对某些字符进行转义。

    顺便提一下,Perl 的qq() 运算符可能会让您感兴趣。你可以查一下。

    【讨论】:

    • 谢谢你们两位,非常感谢,现在我如何才能感谢你们两位的正确答案?我相信两者都是正确的,不是吗?
    • 您可以同时投票,但只能接受一个。如果它解决了困境,您可以接受@simbabque 的回答,因为我目前的声望点比他多,所以这会给他带来可喜的提升。感谢您的提问。
    • 您可以同时投票并选择此答案,因为@thb 先回答,或者选择您更喜欢的答案。乐于助人。
    • @simbabque:这位先生坚持,“你先!”另一位先生却不以为然:“不,先生,先!一旦一个人摆脱了这个小闹剧的幽默方面,认真地说,如果更多地效仿你的榜样,世界将会变得更好。 (我敢打赌,你每年都会花一个上午在路边捡垃圾。)
    • 不,我不知道。不过,当我有东西要扔掉时,我确实会找一个垃圾箱。 ;)
    猜你喜欢
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    相关资源
    最近更新 更多