Jeśli spojrzeć na dokumentację uruchamiając:
perldoc -f split
widać trzy formy argumentów split
może trwać:
split /PATTERN/,EXPR,LIMIT
split /PATTERN/,EXPR
split /PATTERN/
Oznacza to, że nawet kiedy przechodzą split
jakiegoś napisu pierwszy argument, perl
, wymusza to na wyrażenie regularne.
Jeśli spojrzymy na ostrzeżeniach możemy uzyskać, gdy próbuje zrobić coś takiego w 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.
widzimy, że po pierwsze, '\\'
jest interpolowana jak backsleshem uciec następnie rzeczywistej backslash, który ocenia się pojedynczy ukośnik odwrotny.
split
następnie umieszcza backslash daliśmy, i wymusza go regex jakbyśmy pisali:
$ my @arry = split(/\/, $string_with_backslashes);
który nie działa, ponieważ jest tylko jeden lewy ukośnik, który jest interpretowany jako po prostu ucieka przedni ukośnik po nim (bez zakończenia) /
), aby pokazać, że regex został zakończony.
Twoje ucieczki na ścieżce są nieprawidłowe. W podwójnym cudzysłowu, '\ Folder' jest interpretowany jako sekwencja specjalna' \ F'. – TLP
Zła praktyka polega na używaniu cudzysłowów wokół wzoru separatora dla 'split', ponieważ nie wyraża ona odpowiednio semantyki i powoduje podwójną kompilację. Zawsze używaj ukośników, chyba że chcesz przekazać pojedynczy ciąg spacji, aby wywołać domyślne zachowanie, gdy "" "jest właściwym wyborem. – Borodin
@TLP Tak, wiem, zwykle umieszczam tylko pojedyncze cytaty dla ścieżki. dzięki –