Yet another demonstration to be sure MCE::Hobo and MCE::Shared are not impacted when modifying the record separtor. Not localizing the record separator works too. Workers store the result into a shared array.
#!/usr/bin/perl use strict; use warnings; use MCE::Hobo; use MCE::Shared; my $mbnum = $ARGV[0] or die "usage: $0 mbnum\n"; my @ldif_files = qw( /path/to/file1.ldif.bz2 /path/to/file2.ldif.bz2 /path/to/file3.ldif.bz2 ); my $ret = MCE::Shared->array(); for my $idx (0 .. $#ldif_files) { my $file = $ldif_files[$idx]; mce_async { local $/ = ""; $ret->set($idx, ""); open my $fh, "-|", "/usr/bin/bzcat $file" or warn "open error ($file): $!"; if (defined fileno($fh)) { while (<$fh>) { if (/uid=$mbnum/m) { $ret->append($idx, $_); last; } } close $fh; } }; } $_->join for MCE::Hobo->list; # or MCE::Hobo->waitall; print join('', $ret->values) if $ret->len;
Regards, Mario
In reply to Re^6: Searching large files a block at a time
by marioroy
in thread Searching large files a block at a time
by JediWombat
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |