Smartmatching

Note: Smartmatching is a relatively new feature and several aspects of its peculiar behavior may change in subsequent Perl releases.

expr1 ~~ expr2

Smartmatches expr2 against expr1.

when ( expr )

In most cases, smartmatches $_ against expr.

In other cases, treats expr as a boolean expression.

The behavior of a smartmatch depends on what type of thing its arguments are. The behavior is determined by the following table: the first row that applies determines the match behavior (which is thus mostly determined by the type of the right operand). Note that the smartmatch implicitly dereferences any nonblessed hash or array ref, so the Hash and Array entries apply in those cases. For blessed references, the Object entries apply.

Left

Right

Type of match implied

Any

undef

Undefinedness.

Any

Object

Invokes ~~ overloading on the object, or dies.

Hash

CodeRef

Sub truth for each key; true if hash is empty.

Array

CodeRef

Sub truth for each element; true if array is empty.

Any

CodeRef

Scalar sub truth.

Hash

Hash

True if every key is found in both hashes.

Array

Hash

Hash keys intersection.

Regex

Hash

Hash key grep.

undef

Hash

Always false.

Any

Hash

Hash entry existence.

Hash

Array

Hash Keys Intersection.

Array

Array

Smartmatches corresponding elements.

Regex

Array

Array grep.

undef

Array

Array contains undef.

Any

Array

Match against an array element.

Hash

Regex

Hash key grep.

Array

Regex

Array grep.

Any

Regex

Pattern match.

Object

Any

Invokes ~~ overloading on the object, or falls back.

Any

Num

Numeric equality.

Num

Num-alike

Numeric equality if it ...

Get Perl Pocket Reference, 5th Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.