読者です 読者をやめる 読者になる 読者になる

Perl日記

PerlとかRubyとかPHPとかPythonとか

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

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

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


なんでないんだろう?