use strict;
use warnings;
#only linux
#use diagnostics;
# - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - -
sub in_function {
my $file = shift;
glob($file) or die ("$file file was not found\n"); #this fails second time called
# this is ok second time called
#my @dummy = glob($file) or die ("$file file was not found\n");
}
# - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - -
my $file = "/tmp/file1*.pdf";
glob($file) or die ("$file file was not found\n");
in_function($file);
$file = "/tmp/file2*.pdf";
glob($file) or die ("$file file was not found\n");
in_function($file);
Первый глобус в порядке Первый глобус в_функции в порядке Второй глобус в порядке Второй глобус в_функции терпит неудачу Зачем мне нужно присваивать глобус переменной при вызове внутри функции?
glob
, если бы вы не использовали возвращаемое значение?glob or die
вряд ли будет полезным способом использованияglob
. - person TLP   schedule 19.09.2014glob
может дать ложное срабатывание на существование файла. Попробуйте, например, удалить*
из строки, и вы увидите, что всегда получаете совпадение. - person TLP   schedule 19.09.2014glob('{a,b}')
например - person ysth   schedule 19.09.2014glob
вернет только имена существующих файлов, если только не содержит без подстановочных знаков*
или?
или класса символов[abc]
. Хотя это означает, что простое имя файла без метасимволов будет просто отображено (например,glob 'abc'
вернетabc
независимо от того, существует ли оно), вы можете принудительно проверить каталог, поместив один из символов в класс символов, напримерglob '[a]bc'
- person Borodin   schedule 19.09.2014glob 'file_[abc]*.txt'
, но вам придется проверить полученный список отдельно, чтобы убедиться, что присутствуют все вариантыa
,b
иc
. - person Borodin   schedule 19.09.2014() = grep -f, glob $pattern or die
- person ysth   schedule 19.09.2014glob
проверит наличие файлов только, если передаваемый вами шаблон содержит подстановочные знаки, то есть*
,?
и класс символов[...]
- person Borodin   schedule 20.09.2014