The filename is not unique,just curious what is the problem with the above code if the filename is not unique and how using array of hashes will resolve the problem?
| [reply] |
#!perl
use strict;
use warnings;
my %files_by;
while (<DATA>) {
my ($file_path, $file_name, $version)
= m{^(.*/(.*))#(\d+)$};
push @{ $files_by{$file_name} }, {
file_path => $file_path,
version => $version,
};
}
for my $file_name (sort keys %files_by) {
for my $href (@{ $files_by{$file_name} }) {
print "File name: $file_name\n";
print "File path: $href->{file_path}\n";
print "File version: $href->{version}\n";
}
}
# This prints 6
print $files_by{'modem.c'}[2]{version}, "\n";
# This prints '//depot/asic/tools/perl/files/examples/apps.c'
print $files_by{'apps.c'}[0]{file_path}, "\n";
__DATA__
//depot/asic/tools/perl/scripts/examples/modem.c#4
//depot/asic/tools/perl/scripts/examples/modem.c#5
//depot/asic/tools/perl/scripts/examples/modem.c#6
//depot/asic/tools/perl/scripts/examples/modem.c#7
//depot/asic/tools/perl/files/examples/file.txt#2
//depot/asic/tools/perl/proc/examples/apps.c#14
| [reply] [d/l] |
I am trying to output the hash to a file "hash_glf.txt",using the following code,the file given as input is 40,000 lines.It takes a lot of time to outpuf to "hash_glf.txt",if I change the input file to some 100 lines,I can see the hash structure being output'ed to hash_glf.txt immediately.Is there a way I can quicken the script to output to the file quickly?
#!/usr/bin/perl -w
use strict;
use warnings;
use Data::Dumper;
my %files_by;
print "Enter File1 ";
my $file1_name = <>;
chomp($file1_name);
open my $DATA, '<', $file1_name or die "Cannot open file 1\n";
while (<$DATA>) {
my ($file_path, $file_name, $version)
= m{^(.*/(.*))#(\d+)$};
push @{ $files_by{$file_name} }, {
file_path => $file_path,
version => $version,
};
}
open my $hash_glf, '>', "hash_glf.txt";
print $hash_glf Dumper( \%files_by );
close $DATA;
| [reply] [d/l] |