Perl

$a == 'a' && $a == 'b' && $a == 'c'がtrueになるPerlスクリプト

タイトルから出落ち感タップリですが…

$a = 0;
say "yes" if $a == 'a' && $a == 'b' && $a == 'c';

Perlでは文字列に対して==演算子を使うと、数値に変換できない場合に0として比較されるので、'a''b''c'0と評価されてしまいます。
文字列に対してはeqを使いましょうというのは基本ですが、いざ==を使うとどういう挙動をするかって意外と覚えてないので記事にしてみました。

元ネタに対する回答

クロージャを使う方法

実は元ネタに対してクロージャを使った解法を考えたのですが、より上位の解法が出ていたので、単体で記事にするのは微妙だったので、出落ち記事にしました。

{
    my $i =1;
    sub a
    {
        return $i++;
    }
}
say "hoge" if a ==1 && a == 2 && a == 3;

「その2」の方の複数回呼ばれても、に寄せるなら、

{
    my $i =0;
    sub a
    {
        return ($i++)%3+1;
    }
}
say "hoge" if a ==1 && a == 2 && a == 3;
say "piyo" if a ==1 && a == 2 && a == 3;

みたいな書き方もありかなと思います。
ただ、クロージャで突破する系は3回セットで呼ばれる前提になるので、==演算子書き換える系よりは安定性に劣ってしまいますね…
overload使えばいけるのかな…