识别具有多个 @ 符号的行

Identifying lines with more than one @ symbol

给定一个输入(但并不总是这种格式)

an@example.commailto:an@example.com

测试一行中是否存在多个 @ 符号的最有效方法是什么?

if ( $str =~ /@.*@/ ) 

将匹配具有 @ 后跟任意数量的字符(甚至零)然后是 @.

的任何行

计算字符串中字符的规范方法是使用 tr///.

像这样

use strict;
use warnings;
use 5.010;

my $s = 'an@example.commailto:an@example.com';

my $n = $s =~ tr/@//;

say $n;

输出

2

所以你可以这样写

if ( $s =~ tr/@// > 1 ) {
  # do stuff
}