Почему я получаю одну и ту же контрольную сумму MD5 для, казалось бы, разных входных данных, используя Perl's Digest::MD5?

На моей платформе Linux с 64-битной перекомпилированной perl и терминалом Mac SSHing (я думаю, UTF-8). Я даю всю эту информацию на всякий случай, если она может быть актуальной.

# perl -e 'use Digest::MD5 qw/md5_hex/; print(md5_hex("alex@vi\n") ."\n");'
756e98065cb8cbf603a3dbef2afe9261

# perl -e 'use Digest::MD5 qw/md5_hex/; print(md5_hex("alex@visi\n") ."\n");'
756e98065cb8cbf603a3dbef2afe9261

# perl -e 'use Digest::MD5 qw/md5_hex/; print(md5_hex("alex@vision\n") ."\n");'
756e98065cb8cbf603a3dbef2afe9261

# perl -e 'use Digest::MD5 qw/md5_hex/; print(md5_hex("alex@visionten\n") ."\n");'
756e98065cb8cbf603a3dbef2afe9261

# perl -e 'use Digest::MD5 qw/md5_hex/; print(md5_hex("alex@visionten.\n") ."\n");'
d32e04de6906b3f284c6834b4d1d77c1

# perl -e 'use Digest::MD5 qw/md5_hex/; print(md5_hex("alex@\n") ."\n");'
264eca1047ccc6272ac2e338c695379e

person Alex F    schedule 02.07.2010    source источник
comment
Вы пытались распечатать входные данные в md5_hex непосредственно перед вызовом функции?   -  person Ether    schedule 02.07.2010
comment
Всегда включайте предупреждения; даже (или, может быть, особенно?) на остротах.   -  person ysth    schedule 02.07.2010
comment
Верно, либо -Mstrict, либо -w в командной строке выявили бы проблему.   -  person Chris Johnsen    schedule 02.07.2010
comment
Вот более короткий стиль написания однострочников: perl -MDigest::MD5=md5_hex -wE "say md5_hex(qq/alex\@vi\n/);"   -  person dolmen    schedule 05.07.2010


Ответы (1)


Вы используете @ внутри строки в двойных кавычках. Все вещи @vision и @visionten оцениваются как одно и то же.

person Community    schedule 02.07.2010
comment
Правильный. Perl интерполирует встроенные @vision и @visionten как пустые массивы, в результате чего ничего не выводится. Печать строк параметров md5_hex() покажет, что большинство строк в конечном итоге оцениваются как alex\n - person the Tin Man; 02.07.2010
comment
@hobbs: Для однострочников это немного сложнее. - person ; 02.07.2010
comment
Не сложнее, чем в любом другом контексте, @Kinopiko. - person Rob Kennedy; 02.07.2010
comment
@Kinopiko -mstrict даже короче, чем use strict :) - person hobbs; 02.07.2010
comment
@alex: каждый, кто использует Perl, хотя бы раз совершал одну и ту же ошибку. - person ; 04.07.2010