Перебирая символы в Perl - PullRequest
6 голосов
/ 01 февраля 2012

У меня довольно большие затруднения, я могу выяснить какое-то странное поведение при циклическом просмотре символов в Perl, используя цикл for. Этот фрагмент кода работает так же, как и ожидалось:

for (my $file = 'a'; $file le 'h'; $file++) {
    print $file;
}

Вывод: abcdefgh

Но когда я пытаюсь перебрать символы в обратном порядке, вот так:

for (my $file = 'h'; $file ge 'a'; $file--) { 
    print $file;
}

дает мне следующее.

Выход: ч

Может быть, оператор декремента ведет себя не так, как мне кажется, когда задействованы символы?

У кого-нибудь есть идеи по этому поводу? Буду очень признателен за вашу помощь!

С уважением,

Tommy

Ответы [ 4 ]

14 голосов
/ 01 февраля 2012

Оператор автоматического декремента не магический, согласно perlop

Вы можете сделать что-то вроде этого, хотя:

for my $file (reverse 'a' .. 'h') { 
    print $file;
}
3 голосов
/ 01 февраля 2012

В Perl оператор приращения (++) равен магический , тогда как оператор декремента не является ...

в качестве альтернативы модификации Эрика.можно просто сделать:

for (my $file = 'h'; $file ge 'a';  $file=chr((ord$file)-1)) { 
    print $file;
}

для отсчета символов вниз.

2 голосов
/ 01 февраля 2012

Оператор '++' волшебен, чтобы работать со строками интересными способами.Верблюд, 3-е издание, стр. 91, приводит следующие примеры:

print ++($foo = '99'); # prints '100'
print ++($foo = 'a0'); # prints 'b1'
print ++($foo = 'Az'); # prints 'Ba'
print ++($foo = 'zz'); # prints 'aaa'

Оператор '-' не имеет этой магии.

1 голос
/ 01 февраля 2012

Да, магическое поведение только для автоинкремента:

http://perldoc.perl.org/perlop.html#Auto-increment-and-Auto-decrement -> «Оператор автоинкремента имеет немного дополнительной встроенной магии».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...