Я искал сценарий Perl, который неожиданно висел, когда он никогда не висел раньше. Я не знаю Perl. Я, наконец, проследил проблему до строки пути к файлу. Этот код работает:Почему подчеркивание в имени пути заставляет скрипт Perl зависать?
$eng_morph = "~/datafile.en.db";
tie %eng_morph, "DB_File", $eng_morph, O_CREAT|O_RDWR, 0664|| die "Cannot open dbmfile $eng_morph";
Когда я изменить имя файла, чтобы включить подчеркивание, то вторая линия висит навсегда:
$eng_morph = "~/datafile.en_us.db";
tie %eng_morph, "DB_File", $eng_morph, O_CREAT|O_RDWR, 0664|| die "Cannot open dbmfile $eng_morph";
Есть ли что-то не так с синтаксисом? Есть ли способ разрешить подчеркивание?
Я использую Ubuntu 14.04. Вот вывод uname:
Linux-ноутбук ASUS 3.13.0-43-родовое # 72-Ubuntu SMP пн 8 декабря 19:35:06 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Кроме того, я также использую по умолчанию Perl в дистрибутиве. Его версия выход:
Это Perl 5, версия 18, подрывная 2 (v5.18.2), построенный для x86_64-Linux-гну-нить-мульти (с 41 зарегистрированных пластырей см Perl -V для более подробно)
ваш код имеет несвязанную ошибку: '||' должен быть 'или'. '||' имеет высокий приоритет, поэтому вместо того, чтобы угасать при сбое связи, он умирает, когда 0664 является ложным (это никогда) – ysth
@ysth - это может быть не «несвязанным». Возможно, эта ошибка маскирует реальную проблему, а «умирающая часть» никогда не умирает. Я не знаком с Perl и не понимаю синтаксис вашей коррекции. Не могли бы вы поместить полную коррекцию в ответ, чтобы я мог попробовать? – tahoar