aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRandy Lauen <randy.lauen@gmail.com>2019-08-21 22:50:44 -0500
committerRandy Lauen <randy.lauen@gmail.com>2019-08-21 22:50:44 -0500
commite53696169ae773df677c2a170bb217c0793aa02c (patch)
treef05124df30a78cf4271399ae86779d08ac292270
parent14f3ef7240468c62a55f7a1e6b7a11b506cab369 (diff)
downloadperlweeklychallenge-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.pl19
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;
}
}