in reply to File to array and reading back

Kris0r:

Apparently, I've not had enough coffee this morning--I missed your last sentence. It's complaining that $_ is not numeric. So I'm guessing you're iterating over the list of strings rather than a list of numbers when processing the array, something like:

my @array1 = ('foo', 'bar', 'baz'); my @array2 = ('zim', 'zam', 'baz'); # should work: for (0 .. $#array1) { if ($array1[$_] eq $array2[$_]) { print "match! $array[$_]\n" } else { print "mismatch $array1[$_] ne $array2[$_] } } # should give a similar error: for (@array1) { if ($array1[$_] eq $array2[$_]) { print "match! $array[$_]\n" } else { print "mismatch $array1[$_] ne $array2[$_] } }

Try printing the value of $_ before using it as an array index, and you'll see what perl is complaining about.

You're not showing your comparison code, but from the error message, I'm guessing you're using the numeric equality operator (==) rather than the string equality operator (eq) to compare lines.

Update: Rewrote node after re-reading OP and realizing my goof.

...roboticus

When your only tool is a hammer, all problems look like your thumb.

Replies are listed 'Best First'.
Re^2: File to array and reading back
by Kris0r (Initiate) on Jun 19, 2012 at 10:36 UTC

    Edit: Can't write quick enough! You were correct, I think I was trying to use the string itself as its place in the array. Your example is easier to follow than my workaround so I'll try that. Thanks!

    I did show it, albeit it was inline with other text so easy to miss.

    if($lines1[$_] eq $lines2[$_])

    I have fixed it by creating a basic for loop and iterating through using the size of the array as the limit. Which now seems to work:

    for(my $i = 0; $i < @lines1; $i++) { if($lines1[$i] eq $lines2[$i]) { print("same.\n"); } else { $difference++; }

    That seems a bit archaic and far too long to be Perl, but I wrote it and it works so I'm happy to use it!