Dichiarazione di non responsabilità: l'ho posticipato a PerlMonks.Perl6: Cattura di una nuova riga di Windows in una stringa con espressione regolare
In Perl5, posso rapidamente e facilmente stampare la rappresentazione esadecimale della linea \r\n
stile Windows chiusura
perl -nE '/([\r\n]{1,2})/; print(unpack("H*",$1))' in.txt
0d0a
Per creare un file di Windows senza fine su Unix, se si vuole testare, creare un in.txt
file con una singola riga e una fine riga. Quindi: perl -ni -e 's/\n/\r\n/g;print' in.txt
. (o in vi/vim, crea il file e fai semplicemente :set ff=dos
).
Ho provato molte cose in Perl6 a fare la stessa cosa, ma non riesco a farlo funzionare, non importa quello che faccio. Ecco la mia prova più recente:
use v6;
use experimental :pack;
my $fn = 'in.txt';
my $fh = open $fn, chomp => False; # I've also tried :bin
for $fh.lines -> $line {
if $line ~~ /(<[\r\n]>**1..2)/ {
$0.Str.encode('UTF-8').unpack("H*").say;
}
}
Uscite 0a
, come fare:
/(\n)/
/(\v)/
In primo luogo, io non so nemmeno se sto usando unpack()
o l'espressione regolare in modo corretto. In secondo luogo, come posso acquisire entrambi gli elementi (\r\n
) della nuova riga in P6?
In Perl5, preferisco 'sprintf ("% v02X", $ s)'. Funziona per qualsiasi stringa, non solo stringhe di byte. – ikegami