Perl wget引号语法问题

Perl wget引号语法问题,perl,wget,Perl,Wget,谢谢你的阅读 对于wget的shell命令,类似于这样的操作: wget -q -O - http://www.myweb.com | grep -oe '\w*.\w*@\w*.\w*.\w\+' | sort -u 但是,当我尝试在Perl程序中插入该命令时,会出现一个语法错误,它指的是“在运算符预期的位置找到反斜杠,在运算符预期的位置找到bareword”。所以我用这个{}替换了围绕正则表达式的引号,但是,这就像注释了它一样,它不会带来错误,但是好像正则表达式没有,所以显然大括号是错误的

谢谢你的阅读

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

wget -q -O - http://www.myweb.com | grep -oe '\w*.\w*@\w*.\w*.\w\+' | sort -u
但是,当我尝试在Perl程序中插入该命令时,会出现一个语法错误,它指的是“在运算符预期的位置找到反斜杠,在运算符预期的位置找到bareword”。所以我用这个{}替换了围绕正则表达式的引号,但是,这就像注释了它一样,它不会带来错误,但是好像正则表达式没有,所以显然大括号是错误的尝试

这是代码,它位于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命令不起作用

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

system ("wget -q -O -\"$_\" | grep -oe '\\w*.\\w*@.\\w*.\\w\\+' | sort -u");
您可以在双引号中包含您喜欢的内容,只需转义某些字符


顺便说一句,Perl的
qq()
操作符可能会引起您的兴趣。您可以查找它。

您正在系统调用中使用单引号
。它们不会为您填写变量。
$\uu
未被替换。此外,
grep
旁边的单引号使该语法无效

请尝试以下方法:

system ("wget -q -O - $_ | grep -oe '\w*.\w*\@.\w*.\w\+' | sort -u");
您还可以使用运算符:

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



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

这不是一个坏答案,但是
wget-q-0-“foo-bar”
wget-q-0-foo-bar
并不完全相同。OP不想保留引号吗?另外,至少在我的Perl解释器上,不使用反斜杠似乎不起作用,在我看来,即使这样做了,也会表现出糟糕的风格。两个答案都是正确的,都值得称赞,我怎么能相信你们两个呢?谢谢,thb。我刚检查了反斜杠。由于OP不使用
\n
或类似的功能,因此此功能不需要转义。我同意,如果他们逃跑,情况会更清楚。我把它忘了,以免弄得乱七八糟。关于单引号,在命令行示例中没有。我假设OP将它们放在perl代码中,因为他认为这将使它填充变量。@thb。嗯,wget在整个网站上进行递归搜索。只是,我不想下载这个网站,我只想要grep给我的东西。我不知道如何使用Perl@thb,或者换句话说,让wget扫描web所需要做的就是-r,这就是为什么我认为它比使用Perl更容易,但尽管我是一个爱好者,但我还远远不是一个专家。谢谢你们两位,非常感谢,现在我怎样才能给你们两个正确的答案表示感谢呢?我相信两人都是对的,不是吗?你可以投票支持两人,但只能接受一人。如果它解决了这个难题,你可以接受@simbabque的答案,因为我现在的声望比他高,所以这会给他带来一个受欢迎的提升。谢谢你的提问。你可以将两个答案都投上一票,然后选择这个答案,因为@thb首先回答了,或者选择一个你更喜欢的答案。很乐意帮忙。@simbabque:这位先生坚持说,“你先来!”但另一位先生不会说:“不,先生,你先来!”一旦人们摆脱了这场小闹剧的幽默,说真的,如果更多的人效仿你,世界会变得更美好。(我打赌你每年花一个上午在路边捡垃圾。)不,我没有。不过,当我有东西要扔掉的时候,我确实在找垃圾桶