Perl日記

日々の知ったことのメモなどです。Perlは最近やってないです。

マジックデクリメントって

ないんだ…。
というのも、アルファベット一文字の一個前の文字を知りたい状況になったのだけれど、マジック(マジカル)インクリメントは何かで見て知っていたので、それならと思ってやってみたらあえなく玉砕。

my $char = 'U';
my $prev = --$char;
say $prev; #=> -1

-1って。undef扱いじゃあないかよ。
というわけで調べてみる。Web検索とperldoc perlopしてたらちゃんとあった。
perlop - perldoc.perl.org

$ perldoc perlop
...
Auto-increment and Auto-decrement
..
  The auto-decrement operator is not magical.

しかたねーので、つくった。

sub magic_decrement {
  my $char = shift;
  my $buf;
    for my $alphabet (('A' .. 'Z'), ('a' .. 'z')) {
      if ($char eq $alphabet) {
        return $buf || 'A';
      }
      $buf = $alphabet;
    }
}
my $char = 'U';
my $prev = magic_decrement($char);
say $prev; #=> T


なんでないんだろう?