У меня проблема с использованием abs_path()
.Я даю этой функции правильный путь, но в качестве возвращаемого значения я получаю undef
.Путь читается из командной строки с использованием следующего кода.
use warnings;
use strict;
use Data::Dumper;
use Cwd qw();
print scalar @ARGV;
print "\n";
print "$ARGV[0]\n";
print "$ARGV[1]\n";
print "$ARGV[2]\n";
my $val = $ARGV[2];
print "$val\n";
my $result = "";
$result = Cwd::abs_path($val);
print "$result\n";
Сценарий Perl выполняется следующим образом:
perl pl_test.pl -results_dir = /home/user123/
Я получаю следующий результат:
3
-results_dir
=
/home/user123/
/home/user123/
Use of uninitialized value in concatenation (.) or string at pl_test.pl line 16.
Я подтвердил с помощью отладчика, что проблема в том, что $ result получает undef
в качестве возвращаемого значения из Cwd::abs_path($val);
.Я не понимаю, почему это происходит
Один из комментариев побудил меня провести дополнительное тестирование.Я обнаружил, что существует зависимость от конечного слеша следующим образом:
, если каталог не существует: работает без завершающего слеша, возвращает undef
сзавершающий слеш.
, если каталог является подкаталогом каталога, который не существует, всегда возвращает undef
, если каталогсуществует, будет работать в обоих случаях, с косой чертой или без нее