There is a lot you can do to make your code better, as shown below. Note that this will not make your code faster.
- Localize your variables (using my).
- Localize file handles too, after making them lexicals. (Now that they're scoped, close is no longer needed.)
- Use strict to make sure your variables are localized.
- Use warnings to detect errors.
- Don't open four files when you only need to open one or two.
- Indent properly.
- Use the safer 3-arg open.
- Don't hardcode the area codes.
- Don't use regexp to search for strings. Use index for a great speed boost.
use strict;
use warnings;
use File::Spec qw( );
use IO::Dir qw( );
my $dir = 'E:\\Documents and Settings\\ebrine';
my $cell = File::Spec->catfile($dir, 'Cell.txt');
my %area_codes = map { /(\d+)/; $1 => File::Spec->catfile($dir, $_) }
grep /^\d+\.txt\z/i,
IO::Dir->new($dir)->read();
my $num;
... Tk code ...
sub search {
my $found = 0;
my @number = split(/-/, $num);
my $search_text = join '', @number;
my $file = $area_codes{$num[0]};
if (defined $file) {
open(my $fh, '<', $file)
or die("Unable to open file for areacode $num[0]: $!\n");
$found = search_file($fh, $search_text);
}
if (not $found) {
open(my $fh, '<', $cell)
or die("Unable to open file for cellphones: $!\n");
$found = search_file($fh, $search_text);
}
... Show results ...
}
sub search_file {
my ($fh, $search_text) = @_;
while (<$fh>) {
return 1 if index($_, $search_text) >= 0;
... Update ticker ...
}
return;
}
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.