perl中的~~做什么?

perl中的~~做什么?,perl,operators,Perl,Operators,我看到了这段代码,无法理解它在做什么。我成功地编译了它。我搜索了~~操作符,但没有运气 unless ($1 ~~ @tables) { push @tables, $1; } 参考: 首先在Perl 5.10.1中提供(5.10.0版本的表现有所不同),binary~~在其参数之间进行“智能匹配” ~~运算符以“多态”方式比较其操作数,确定如何根据它们的实际类型(数字、字符串、数组、哈希等)进行比较,就像它与之共享相同优先级的相等运算符一样,~~返回1表示true,返回“”表示fals

我看到了这段代码,无法理解它在做什么。我成功地编译了它。我搜索了~~操作符,但没有运气

 unless ($1 ~~ @tables) {
 push @tables, $1;
 }
参考:

首先在Perl 5.10.1中提供(5.10.0版本的表现有所不同),binary~~在其参数之间进行“智能匹配”


~~运算符以“多态”方式比较其操作数,确定如何根据它们的实际类型(数字、字符串、数组、哈希等)进行比较,就像它与之共享相同优先级的相等运算符一样,~~返回1表示true,返回“”表示false。最好将其大声读出为“in”、“in of”或“is contained in”,因为左操作数通常在右操作数中查找。这使得操作数到smartmatch操作数的顺序通常与常规匹配运算符的顺序相反。换句话说,“较小”的东西通常放在左操作数中,较大的放在右操作数中。

这是一个smartmatch运算符


如果您想了解Perl运算符,只需键入
perldocperlop

这段代码检查@tables中是否存在$1,请注意;因为这是一个相对非常昂贵的操作!只有当“@tables”总是很小和/或这是一个一次性脚本时,您才应该这样编写代码。如果不是,则使用散列。