theillien1 has asked for the wisdom of the Perl Monks concerning the following question:
I have a script which, based on a number passed from the command line will create random numbers of varying lengths. The way the script is written I may get 0 more than once. As it is a hash, no matter how many times 0 shows up, it will only appear once in the hash with the last value assigned. This leaves me short on elements compared to the request.
In order to determine how short I'm trying to find out how many keys there are:
print "randList length: " . scalar keys %randList;This has the strange habit of printing twice. If there are 18 elements I'll get 1818; 20 elements begets 2020.
Later in the script I assign the keys to an array. I attempted to do the same thing using
print "numList length: " . ($#numList + 1);This also outputs the value twice. Interestingly, if I don't add one to it I get two numbers. If the length is 17 I get 1617. I've also tried scalar @numList with the same results.
What could I be doing wrong? Full script below:#!/usr/bin/perl use warnings; use strict; use Lingua::JA::Numbers; my $converted = "converted_numbers.csv"; my $len = $ARGV[0]; my (@numList, @rom, @kana, @kanji, %randList); open(OUTFILE, ">$converted"); binmode OUTFILE, ":utf8"; for (my $i=0; $i<$ARGV[1]; $i++) { my $genlen = int rand($len); my $max = 1 . 0 x $genlen; my $num = int rand($max); $randList{$num} = 1; } print "randList length: " . (scalar keys %randList) . "\n"; foreach my $key (keys %randList) { push(@numList, $key); } print "Length randList: " . ($#numList + 1); for my $num (@numList){ my $jaRom = Lingua::JA::Numbers->new($num, {style=>'romaji'}); my $jaKana = Lingua::JA::Numbers->new($num, {style=>'hiragana'}); my $jaKanji = Lingua::JA::Numbers->new($num, {style=>'kanji'}); push(@rom, $jaRom); push(@kana, $jaKana); push(@kanji, $jaKanji); } my (@hyphens, @noHyphens); for my $strg (@rom){ @hyphens = Lingua::JA::Numbers::to_string($strg); for my $val (@hyphens){ $val =~ s/-//g; } push(@noHyphens, join(" ", @hyphens)); } @rom = @noHyphens; my $size = scalar @numList; foreach (my $i=0; $i<$size; $i++){ print OUTFILE $numList[$i] . "," . $rom[$i] . "," . $kana[$i] . ", +" . $kanji[$i] . "\n"; } close OUTFILE;
|
|---|