diff options
| author | Randy Lauen <randy.lauen@gmail.com> | 2019-08-21 22:50:44 -0500 |
|---|---|---|
| committer | Randy Lauen <randy.lauen@gmail.com> | 2019-08-21 22:50:44 -0500 |
| commit | e53696169ae773df677c2a170bb217c0793aa02c (patch) | |
| tree | f05124df30a78cf4271399ae86779d08ac292270 | |
| parent | 14f3ef7240468c62a55f7a1e6b7a11b506cab369 (diff) | |
| download | perlweeklychallenge-club-e53696169ae773df677c2a170bb217c0793aa02c.tar.gz perlweeklychallenge-club-e53696169ae773df677c2a170bb217c0793aa02c.tar.bz2 perlweeklychallenge-club-e53696169ae773df677c2a170bb217c0793aa02c.zip | |
read in one byte at a time
| -rw-r--r-- | challenge-022/randy-lauen/perl5/ch-2.pl | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/challenge-022/randy-lauen/perl5/ch-2.pl b/challenge-022/randy-lauen/perl5/ch-2.pl index 468680a919..6a21c43c19 100644 --- a/challenge-022/randy-lauen/perl5/ch-2.pl +++ b/challenge-022/randy-lauen/perl5/ch-2.pl @@ -15,22 +15,21 @@ encode( $ARGV[0] ); sub encode { my $file = shift; - open my $in, '<', $file or die $!; + open my $in, '<:raw', $file or die $!; open my $out, '>', "$file.lzw" or die $!; my %codes = map { chr($_) => $_ } 0 .. 255; my $next_code = 256; my $current_string = ''; - while ( my $line = <$in> ) { - foreach my $char ( split //, $line ) { - $current_string .= $char; - if ( !exists $codes{ $current_string } ) { - $codes{ $current_string } = $next_code++; - $current_string = substr( $current_string, 0, -1 ); - print $out pack( 'S', $codes{ $current_string} ); - $current_string = $char; - } + my $char; + while ( read($in, $char, 1) ) { + $current_string .= $char; + if ( !exists $codes{ $current_string } ) { + $codes{ $current_string } = $next_code++; + $current_string = substr( $current_string, 0, -1 ); + print $out pack( 'S', $codes{ $current_string} ); + $current_string = $char; } } |
