Questa domanda deriva dalla necessità di garantire che le modifiche apportate al codice non influiscano sui valori che emette sul file di testo. Idealmente, farei un sottotitolo per prendere due nomi di file e return 1
o return 0
a seconda che i contenuti siano identici o meno, gli spazi bianchi e tutto il resto.Come posso usare Perl per determinare se il contenuto di due file è identico?
Dato che l'elaborazione del testo è un bene di Perl, dovrebbe essere abbastanza facile confrontare due file e determinare se sono identici o meno (codice sotto non testato).
use strict;
use warnings;
sub files_match {
my ($fileA, $fileB) = @_;
open my $file1, '<', $fileA;
open my $file2, '<', $fileB;
while (my $lineA = <$file1>) {
next if $lineA eq <$file2>;
return 0 and last;
}
return 1;
}
L'unico modo che posso pensare (sans moduli CPAN) è quello di aprire i due file in questione, e leggerli in linea per linea fino a quando viene trovata una differenza. Se non viene rilevata alcuna differenza, i file devono essere identici.
Ma questo approccio è limitato e impacciato. Cosa succede se le linee totali differiscono nei due file? Devo aprire e chiudere per determinare il conteggio delle righe, quindi riaprire per eseguire la scansione dei testi? Che schifo.
Non vedo nulla in perlfaq5 relativo a questo. Voglio stare lontano dai moduli a meno che non vengano con la distribuzione core Perl 5.6.1.
Sono sorpreso che questa domanda non sia comparsa su SO prima. – Zaid
perché non usare diff? - Se sei su * nix – heferav
@heferav: Renderizza a Perl ciò che può gestire abilmente. Non ho davvero fatto molto in termini di programmazione Unix, tutto qui;) – Zaid