L'output di qr
di perl è stato modificato, a quanto pare tra le versioni 5.10.1 e 5.14.2 e la modifica non è documentata, almeno non completamente.Quando e perché l'output di qr() è cambiato?
Per dimostrare il cambiamento, eseguire il seguente one-liner in ogni versione:
perl -e 'print qr(foo)is."\n"'
uscita da perl 5.10.1-17squeeze6 (Debian Squeeze):
(?-xism:foo)
uscita da Perl 5.14 0,2-21 + deb7u1 (Debian wheezy):
(?^:foo)
La documentazione perl (perldoc perlop
) dice :
$ rex = qr/mio.STRING/is;
stampa $ rex; # prints (? si-xm: my.STRING)
s/$ rex/foo /;
che sembra non essere più vero:
$ perl -e 'print qr/my.STRING/is."\n"'
(?^si:my.STRING)
Vorrei sapere quando si è verificato questo cambiamento (la versione di Perl, o sostenere biblioteca o qualsiasi altra cosa).
Alcuni di fondo, nel caso in cui sia rilevante:
Questo cambiamento ha causato una serie di test di unità al sicuro. Devo decidere se aggiornare semplicemente i test unitari per riflettere il nuovo formato o rendere i test sufficientemente dinamici per supportare entrambi i formati, ecc. Per prendere una decisione informata, vorrei capire perché il cambiamento ha avuto luogo. Sapere quando e dove è avvenuto sembra il posto migliore in cui iniziare quell'inchiesta.
La tua terminologia, o forse la tua comprensione di ciò che 'qr' fa, non è giusto. Non è corretto dire "l'output di' qr' ". 'qr' è un operatore che crea un oggetto regex. Ciò che è cambiato è la stringificazione delle regex. Il comportamento di 'qr' non è cambiato. –
@AndyLester: se si desidera ottenere informazioni tecniche, l'output * ha * modificato, almeno nei casi in cui viene utilizzato uno qualsiasi dei nuovi modificatori di espressioni regolari. Ma questo è davvero oltre il punto. Hai capito cosa significava la domanda, giusto? E sospetto che esprimerlo in un modo che potrebbe essere più letteralmente corretto perderebbe significato per un gran numero di persone che potrebbero cercare questa risposta in futuro. – Flimzy
'qr' non ha output. Restituisce un oggetto. L '"output", o la stringificazione di quell'oggetto, è ciò che è cambiato. Nel caso di 'print qr/foo/i', la stringificazione è implicita. –