Perl: в то время как ($key = каждый %hash) не останавливается в ключе = 0

P4IGNORE - это настройка клиента, а не настройка сервера. Возможно, ваш P4V-клиент не настроен на чтение файла игнорирования.

Если вы хотите, чтобы на стороне сервера принудительно устанавливалось, какие файлы поступают на сервер, используйте либо таблицу защиты (которая может применяться ко всем пользователям), либо представление клиента (которое будет применяться каждый раз, когда вы используете это рабочее пространство, независимо от того, вы используете p4 или P4V или любое другое клиентское приложение).

10
задан brian d foy 21 October 2008 в 17:07
поделиться

3 ответа

Вы звоните each в скалярном контексте, таким образом, это не работает из-за возвращаемого значения списка.

Точно так же, как

while ($line = <FILE>)

является специальным в корпусе для добавления неявного defined, так

while ($key = each %hash)

В 5.8.8, который происходит в op.c, строки 3760-3766:

case OP_SASSIGN:
  if (k1->op_type == OP_READDIR
      || k1->op_type == OP_GLOB
      || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
      || k1->op_type == OP_EACH)
    expr = newUNOP(OP_DEFINED, 0, expr);
  break;

Я не уверен, относится ли это ко всем версиям Perl 5.

См. также: Когда делает, в то время как () тестируют на определенный по сравнению с истиной на PerlMonks. Я не могу найти, где это упоминается в документах Perl ( <FILE> случай упоминается, но я не вижу each случай).

29
ответ дан 3 December 2019 в 14:19
поделиться

cjm является правильным. Я просто хочу добавить что когда наталкивающийся на странные вещи как это его часто полезный для выполнения кода через B:: Deparse, чтобы видеть, как Perl понял Ваш код. Мне нравится использовать переключатель-p для проявления ошибок приоритета, также.

$ perl -MO=Deparse,p your_example.plx
(%h) = (0, 'zero', 1, 'one', 2, 'two');
while (defined($k = each %h)) {
    $v = delete $h{$k};
    print "deleted $v; remaining: @h{0..2}\n";
}
your_example.plx syntax OK
6
ответ дан 3 December 2019 в 14:19
поделиться

Спасибо, cjm. Это было ясно некоторое неявное добавление a defined продолжался как этот для шарика, но не, где он был зарегистрирован. Теперь, по крайней мере, я знаю ограниченные случаи, в которых применяется та специальная обработка.

Но информация должна быть в perlfunc документации, не только исходном коде Perl!

0
ответ дан 3 December 2019 в 14:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: