in reply to Perl sha256 question

Tip #2 from the Basic debugging checklist: Display the contents of variables using print or warn:

use strict; use warnings; use Digest::SHA qw( sha256_hex ); my $h = 5472151337331275; print "\$h = >$h<\n\n"; print sha256_hex($h), "\n";

On Perl v5.24.0, which is 64-bit:

17:40 >perl 1639_SoPW.pl $h = >5472151337331275< b5951ee4a7cbfdc9df6b1b74de2d1ba865de40796c756cebe88a806c5a7b9e60 17:40 >

— which is as expected. But on Perl v5.14.4, which is 32-bit:

17:33 >perl 1639_SoPW.pl $h = >5.47215133733128e+015< 32838cef9e4571b4fa9a5297e265cf860a31774de3ca339878d87238af604a45 17:34 >

As Anonymous Monk says, the fix is to turn the argument from a number into a string.

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^2: Perl sha256 question
by Anonymous Monk on May 24, 2016 at 01:49 UTC

    Thank you so much :)

    On the same machine and Perl version, when I set the number to a variable, it works:

    use Digest::SHA qw(sha256_hex); my $num = 5472151337331275; print sha256_hex($num); # b5951ee4a7cbfdc9df6b1b74de2d1ba865de40796c756cebe88a806c5a7b9e60

    What difference does setting it to a variable make?

      It looks as though the assignment is performing a stringification. I haven’t been able to replicate this behaviour. What is your platform, and what is the output of perl -V?

      Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

        Ah sorry my bad.

        The sha256 output of 5489612208355686 when set to a variable is

        "7b74ee85ff18d48641ab219377ad40f3331f242afd94ebb33ddd1e5d61d5b6de",

        not

        "55f570a6c5561160ea4be18f275f66e9bcc3897e527c341c16fd11cb11131a43"