Se si guarda la documentazione eseguendo:
perldoc -f split
vedrete tre forme di argomenti che split
può prendere:
split /PATTERN/,EXPR,LIMIT
split /PATTERN/,EXPR
split /PATTERN/
Questo significa che anche quando si passa split
una stringa come il primo argomento, perl
, lo sta costringendo a un'espressione regolare.
Se guardiamo gli avvertimenti che otteniamo quando si cerca di fare qualcosa di simile in 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.
vediamo che prima, '\\'
viene interpolata come un backslash escape seguito da una barra rovesciata reale, che restituisce un singolo backslash.
split
poi mette il backslash abbiamo dato, e costringe a una regex come se avessimo scritto:
$ my @arry = split(/\/, $string_with_backslashes);
che non funziona perché c'è solo una singola barra rovesciata che viene interpretato come semplicemente fuga la barra diretta dopo (senza avere una terminazione /
) per mostrare che la regex è terminata.
Le tue fughe nel percorso sono sbagliate. In una stringa doppia citazione, '\ Folder' è interpretato come una sequenza di escape' \ F'. – TLP
È spiacevole usare le virgolette attorno al pattern di separazione per 'split' in quanto non esprime correttamente la semantica e causa una doppia compilazione. Usa sempre le barre, a meno che tu non voglia passare una stringa a spazio singolo per invocare il comportamento predefinito, quando '''' è la scelta corretta. – Borodin
@TLP sì lo so, di solito metto solo virgolette singole per il percorso. grazie –