http://www.perlmonks.org?node_id=1193865


in reply to Turning a questionable string into a number

Based on what you've shown us that is quite strange. Are you sure you're grabbing the correct field with $data[12], and have you looked at the hex dump of the entire line? Could you provide us with enough data to reproduce this, like an entire line of input from your file? Have you by any chance reduced the code that you're showing us a little too much, like perhaps you use the ^, |, or & operators somewhere (the latter two maybe accidentally instead of || resp. &&)? See also Short, Self-Contained, Correct Example. Update: Oh yes, and please turn on $Data::Dumper::Useqq=1; or use Data::Dump instead.

Replies are listed 'Best First'.
Re^2: Turning a questionable string into a number
by bradcathey (Prior) on Jun 29, 2017 at 19:40 UTC

    Good questions, but the only thing I haven't given you is a self-contained example that you could run. Apologies. However, I just resaved the file out as unicode 8-bit and everything worked just fine. So, problem solved. A big thanks to all who took the time to response.

    —Brad
    "The important work of moving the world forward does not wait to be done by perfect men." George Eliot
      I just resaved the file out as unicode 8-bit and everything worked just fine.

      Ah yes, Windows does like UTF-16...

      use warnings; use strict; use Encode 'encode'; my $in = "1130\t"; my $str = encode('UTF-16', $in, Encode::FB_CROAK); $str=~s/^\xFE\xFF|\t//g; # remove BOM & tab print $str*1, "\n"; __END__ Argument "\01\01\03\00\0" isn't numeric in multiplication (*) at - lin +e 7. 0

      An alternative for you would also be open($fh, '<:raw:encoding(UTF-16)', 'filetoparse.txt') ... (Updated to add :raw as per choroba's reply, thanks!)

        Also note that on Windows, you need to specify :raw first when specifying a file encoding. See e.g. Re^3: unicode in windows.
        ($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,