in reply to Re^3: Perl SHA256
in thread Perl SHA256

Works fine for me with the proper quoting.

$ echo -n joe.smith@aol.com | sha256sum 4d1612632ab95a0dec3d27f521d2b91cabe9e72a6b1ecdb8784e1ed6f3a93604 - $ perl -MDigest::SHA=sha256_hex -E 'say sha256_hex(q/joe.smith@aol.com +/)' 4d1612632ab95a0dec3d27f521d2b91cabe9e72a6b1ecdb8784e1ed6f3a93604

Your problem is that you are using double quotes which interpolate and using neither strict nor warnings which would have drawn your attention to the undeclared and uninitialised array.

$ perl -wE 'use Digest::SHA "sha256_hex"; say sha256_hex("joe.smith@ao +l.com")' Possible unintended interpolation of @aol in string at -e line 1. Name "main::aol" used only once: possible typo at -e line 1. 4ea2142392947d467539285b3c6e98f073d9d85910f2a1d535f86a95358ab9dd $ perl -Mstrict -wE 'use Digest::SHA "sha256_hex"; say sha256_hex("joe +.smith@aol.com")' Possible unintended interpolation of @aol in string at -e line 1. Global symbol "@aol" requires explicit package name (did you forget to + declare "my @aol"?) at -e line 1. Execution of -e aborted due to compilation errors.

Always use strict and warnings. Always.


🦛

Replies are listed 'Best First'.
Re^5: Perl SHA256
by BOK_NEPA (Initiate) on Feb 15, 2023 at 12:37 UTC

    Hi Hippo.. Your command works fine on the command line.. I can't get it to work in the perl script using a variable for the email.. If I assign your example exactly it works fine.. But if I try to use a variable for a literal email it fails despite everything I've tried to make it work.. I've even tried to build a concatenated string or use substitution to replace a dummy "EMAIL" with actual value.. I've tried every Google search I can think of.. Any suggestions?

    This example works fine $SENDVAR1 = q(perl -MDigest::SHA=sha256_hex -E 'say sha256_hex(q/XXXX/ +)'); my $email_SHA256 = print qx($SENDVAR1); This doesn't work: $SENDVAR1 = q(perl -MDigest::SHA=sha256_hex -E 'say sha256_hex(q/$EMAI +L_IN/)'); my $email_SHA256 = print qx($SENDVAR1);

      Why are you shelling out and running a command line when you can just use the module within your code?

      #!/usr/bin/perl use strict; use warnings; use Digest::SHA qw(sha256_hex); my $email = 'test@example.com'; my $email_sha256 = sha256_hex( $email ); print "$email_sha256\n";
      A reply falls below the community's threshold of quality. You may see it by logging in.
      I think this tutorial page from szabgab's website will be helpful for you.
      q/$EMAIL_IN/ is a string consisting of a dollar sign, capital letter E, capital letter M, etc. That's probably not what you want.