Я обнаружил небольшое неправильное поведение в моем скрипте Perl, когда создаю и проверяю наличие каталогов с тильде, что не происходит, если я использую полный путь /home/user
. Когда я запускаю этот скрипт в первый раз, он создает новый каталог. Когда я запускаю его во второй раз, он не признает существование каталога, и пытается создать его во второй раз:каталоги тильды (~) в Perl
#!/usr/bin/perl
use strict;
my $outdir = '~/test';
my $cmd = "mkdir $outdir";
unless (-d $outdir) {
0 == system($cmd) or die "Error creating outdir $outdir\n $?";
}
1;
[~] $ rm test/ -rf
[~] $ perl dir.pl
[~] $ perl dir.pl
mkdir: cannot create directory `/home/avilella/test': File exists
Error creating outdir ~/test
256 at dir.pl line 7.
Как я могу надежно иметь дело с каталогами, которые используют знак тильды ~
в Perl ?
У меня нет решения, но проблема заключается в следующем: С «MKDIR ~/тест», символ тильды расширяется оболочкой, используемой вызовом 'system'. С '(-d $ outdir)', оболочка не задействована, а символ тильды не разворачивается, поэтому «~/test» рассматривается как литеральное относительное имя каталога. – Deestan
Ваш rmdir не удался. его не 'rm test/-rf', его' rm -rf test/' –
@Paulchenkiller. Вероятно, это должен быть ответ. – TLP