Вам необходимо указать путь к библиотекам, используемым при компиляции кода Scala. Обычно это делается не вручную, а с помощью инструмента сборки, такого как Maven или sbt. Вы можете найти минимальную установку sbt на http://spark.apache.org/docs/1.2.0/quick-start.html#self-contained-applications
попробуйте
@files = grep {!/\.xh$/} <$MYDIR/abc*>;
, где MYDIR - это строка, содержащая путь к вашему каталогу.
opendir (MYDIR, $ newpath); мой @files = grep (/ abc *. * /, readdir (MYDIR)); #DOES NOT WORK
Вы путаете шаблон регулярного выражения с шаблоном глобуса.
#!/usr/bin/perl
use strict;
use warnings;
opendir my $dir_h, '.'
or die "Cannot open directory: $!";
my @files = grep { /abc/ and not /\.xh$/ } readdir $dir_h;
closedir $dir_h;
print "$_\n" for @files;
foreach $file (@files)
{
my $fileN = $1 if $file =~ /([^\/]+)$/;
if ($fileN =~ /\.xh$/)
{
unlink $file;
next;
}
if ($fileN =~ /^abc/)
{
open(FILE, "<$file");
while(<FILE>)
{
# read through file.
}
}
}
также, все файлы в каталоге можно получить, выполнив:
$DIR = "/somedir/somepath";
foreach $file (<$DIR/*>)
{
# apply file checks here like above.
}
В качестве альтернативы вы можете использовать модуль Perl File :: find.
Вместо использования opendir
и фильтрации readdir
(не забудьте closedir
!), Вы можете вместо этого использовать glob
:
use File::Spec::Functions qw(catfile splitpath);
my @files =
grep !/^\.xh$/, # filter out names ending in ".xh"
map +(splitpath $_)[-1], # filename only
glob # perform shell-like glob expansion
catfile $newpath, 'abc*'; # "$newpath/abc*" (or \ or :, depending on OS)
Если вы не заботитесь об удалении $ newpath
с префиксом к результатам glob
, избавьтесь от карты +
разделенный путь
.
opendir(MYDIR, $newpath) or die "$!";
my @files = grep{ !/\.xh$/ && /abc/ } readdir(MYDIR);
close MYDIR;
foreach (@files) {
do something
}
Смысл, который используют kevinadc и Синан Унур, но не упоминают, заключается в том, что readdir ()
возвращает список всех записей в каталоге при вызове в контексте списка. Затем вы можете использовать для этого любой оператор списка. Вот почему вы можете использовать:
my @files = grep (/abc/ && !/\.xh$/), readdir MYDIR;
Итак:
readdir MYDIR
возвращает список всех файлов в MYDIR.
И:
grep (/abc/ && !/\.xh$/)
возвращает все элементы, возвращенные readdir MYDIR
, которые соответствуют критериям там.