Mark, A couple things: 1. if you have something like 099, Perl thinks that you mean the Octal value of 99. The leading 0 makes Perl think you mean Octal instead of digit. For example:
my $i = 99; #-- means the value 99 my $j = 099; #-- means the value 99 in Octal Now, since the Octal number system only runs from 0-8, 9 is illegal and that's the reason why you are getting the "Illegal octal digit '9'..." error 2. Your statement of: map { 'zone x'} {1..3}; should be: map { 'zone x'} (1..3); if fact, you don't even need to put all the zip codes inside the (..) parens. You only need the number of zip codes you are doing the hash slices. for example: @zip_codes{1,5,6,90,345,21} = map { 'zone 1'} (1,5,6,90,345,21); is essentailly the same as: @zip_codes{1,5,6,90,345,21} = map { 'zone 1'} (1..6); since you have 7 zip codes to slice. this is simpler and much less to type. :-) HTH david On Wednesday 20 November 2002 07:12, mark wrote: > Thanks David, this works in the form that you gave me. However, I am > butchering it up to try and see if it will work with all the values I have > and I run into this error. > > Illegal octal digit '9' at noname.pl line 10, at end of line > > I get the impression that perl is interpreting one of my zips as something > other than an integer or range of integers and I am unsure of why it is > doing this or what to do to remedy it. I got the same error when I was > trying to run the one I had written prior to your good advice. I assumed > that I somehow had misunderstood what I could and could not do with a hash, > but now I see that it is the numbers I am using. Can I escape this problem > and still have my hash perform as expected? > > This is the end of line 10: > > map{'zone 6'} > {043,044,046..049,567,576,577,582..588,592,593,693,798..820,822..830,865..8 >8 5}; > > And the previous line 9: > > map{'zone 5'} > {004,005,010..042,045,050..146,148,149,169,180..196,330..334,349,496..505,5 >0 > 8..516,521,539..566,570..575,580,581,664..666,668..672,674..692,730..739,74 >6 ..748,750..754,758,760..797}; > > As you can see, the zones are a bit more involved, but the method should > remain the same should it not? > > > wiggins: Thanks for the perlcircus link. > > TIA, > Mark > > > I don't think you need to do a lot of typing. your best approach(i think > > of > > > course) is to use the zip code as key and the zone code id as value. if > > you > > > use the other way around, you are bound to find your searching algr. slow > > becasue you have to search through tons of zip codes on each search. > > > > try: > > > > #!/usr/bin/perl -w > > use strict; > > > > my %zips; > > > > @zips{100..200} = map{'zone 1'} (100..200); > > @zips{201..300} = map{'zone 2'} (201..300); > > @zips{301..400} = map{'zone 3'} (301..400); > > > > while(<STDIN>){ > > exit if(/^exit/i); > > chomp; > > print "$_ is in $zips{$_}\n" if(exists $zips{$_}); > > } > > > > __END__ > > > > run: > > > > 100 > > 100 is in zone 1 > > 300 > > 300 is in zone 2 > > 400 > > 400 is in zone 3 > > 123 > > 123 is in zone 1 > > exit > > > > david -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]