В Perl можно получить список файлов, которые соответствуют шаблону:
my @list = <*.txt>;
print "@list";
Теперь, я хотел бы передать шаблон как переменную (потому что он передается в функцию). Но это не работает:
sub ProcessFiles {
my ($pattern) = @_;
my @list = <$pattern>;
print "@list";
}
readline() on unopened filehandle at ...
Какие-либо предложения?
Не знаю, возможно ли это в более общем плане, но это возможно, если у вас есть собственный пользовательский MEYnnotationView.
Мне удалось адаптировать подход, задокументированный в http://spitzkoff.com/craig/?p=108 Крейгом Спицкоффом:
Этот подход, скорее всего, можно упростить еще больше - при любых обстоятельствах может не потребоваться внутренний объект представления.
-121--1264671-Ваш вопрос неясен.
При попытке читать запрос HttpWebRequest
поток после того, как другой кодекс написал потоку (ПОЧТОВЫЙ запрос), это не возможно. (Поток посылается непосредственно на сервер и не сохраняется в памяти)
Вместо этого вам потребуется открыть собственный MemureStream, а затем записать его в поток просить, который вы готовы отправить.
-121--2964740-Используйте glob :
use strict;
use warnings;
ProcessFiles('*.txt');
sub ProcessFiles {
my ($pattern) = @_;
my @list = glob $pattern;
print "@list";
}
Вот объяснение, почему вы получаете предупреждение, от операторов ввода/вывода :
Если угловые скобки содержат простая скалярная переменная (например, $ foo), то эта переменная содержит имя вводимой дескриптора файла от... считается более чистым называть внутреннюю функцию непосредственно как glob ($ foo), что, вероятно, является правильным способом сделать это в первую очередь.)
use File::Basename;
@ext=(".jpg",".png",".others");
while(<*>){
my(undef, undef, $ftype) = fileparse($_, qr/\.[^.]*/);
if (grep {$_ eq $ftype} @ext) {
print "Element '$ftype' found! : $_\n" ;
}
}
Как насчет обернуть это командой "eval"? Например, так...
sub ProcessFiles {
my ($pattern) = @_;
my @list;
eval "\@list = <$pattern>";
print @list;
}
Почему бы не передать в функцию ссылку на массив списка файлов?
my @list = <*.txt>;
ProcessFiles(\@list);
sub ProcessFiles {
my $list_ref = shift;
for my $file ( @{$list_ref} ) {
print "$file\n";
}
}