Если вы посмотрите на документацию, выполнив:
perldoc -f split
вы увидите три формы аргументов, которые split
могут принять:
split /PATTERN/,EXPR,LIMIT
split /PATTERN/,EXPR
split /PATTERN/
Это означает, что даже тогда, когда вы проходите split
строку, как первый аргумент, perl
принуждает его к регулярному выражению.
Если мы посмотрим на предупреждения, которые мы получаем при попытке сделать что-то подобное в re.pl
:
$ my $string_with_backslashes = "Hello\\there\\friend";
Hello\there\friend
$ my @arry = split('\\', $string_with_backslashes);
Compile error: Trailing \ in regex m/\/ at (eval 287) line 6.
мы видим, что первое, '\\'
интерполируется как обратный слэш бегству с последующей фактической обратной косой черты, которая принимает значение один обратный слэш.
split
затем помещает обратную косую черту мы дали, и принуждают его регулярное выражение, как если бы мы написали:
$ my @arry = split(/\/, $string_with_backslashes);
, который не работает, потому что есть только один обратный слэш, который интерпретируется как просто избежать передняя косая черта после него (без окончания /
), чтобы показать, что регекс закончился.
Ваши побеги на пути неправильны. В строке с двойными кавычками '\ Folder' интерпретируется как escape-последовательность' \ F'. – TLP
Плохая практика использовать кавычки вокруг шаблона разделителя для 'split', так как она не выражает семантику правильно и вызывает двойную компиляцию. Всегда используйте косые черты, если вы не хотите передавать однопространственную строку, чтобы вызвать поведение по умолчанию, когда '' '' является правильным выбором. – Borodin
@TLP Да, я знаю, я обычно ставил только одиночные кавычки для пути. спасибо –