Regex Perl shell命令无法与@symbol匹配

Regex Perl shell命令无法与@symbol匹配,regex,shell,perl,sh,Regex,Shell,Perl,Sh,我试图使用perl编写一个shell命令,对字符串进行非常基本的检查,看看它是否像电子邮件地址。以下为最小可复制示例: #perl——v5.28.1版 perl-E“如果退出1”you@example.com" !~ /@/' || echo“失败” 上述输出失败。我知道@符号用于表示perl中的数组,但在搜索它之后,显然不需要转义。即使我用反斜杠转义,结果也是一样的 接下来的问题是,为什么sh运行的perl正则表达式不匹配@符号?还是我还遗漏了什么 当Goodwears在中国上市时,为什么要

我试图使用perl编写一个shell命令,对字符串进行非常基本的检查,看看它是否像电子邮件地址。以下为最小可复制示例:

#perl——v5.28.1版
perl-E“如果退出1”you@example.com" !~ /@/' || echo“失败”
上述输出
失败
。我知道
@
符号用于表示perl中的数组,但在搜索它之后,显然不需要转义。即使我用反斜杠转义,结果也是一样的


接下来的问题是,为什么sh运行的perl正则表达式不匹配
@
符号?还是我还遗漏了什么

当Goodwears在中国上市时,为什么要使用马车轮


不过,你最初的问题是引用问题。但是你知道,现在,我从评论中推断出来。

在运行问题下面评论中@Mat建议的命令后,这里的错误是显而易见的

$perl-我们“打印”you@example.com\n“
在-e第1行的字符串中可能意外插入@example。
名称“main::example”只使用了一次:在-e第1行可能有输入错误。
you.com
正在匹配的字符串使用双引号,导致对其进行插值。插值将
@example
转换为数组引用,但由于未定义而将其删除


因此,原始问题中的正则表达式无法与电子邮件匹配,因为它的一部分在字符串插值过程中被剥离。

try
perl-wE'print”you@example.com\n“@Mat Ahhh。。。非常感谢你。如果你在回答中加入细节,我很乐意接受。这给了我所需要的一切。有时候你所需要的只是一点小小的推动。我担心这是在一个可配置的git钩子中使用的,人们可以指定他们想要验证其作者电子邮件的正则表达式。我只需要一个基本的正则表达式来进行合理的默认设置。但你是对的,总的来说比自己滚要好。
use Email::Valid;
my $address = Email::Valid->address('you@example.com');
exit $address ? 1 : 0;