Я следующий сценарий:почему-то с Uniq не работают вместе
use strict;
use List::MoreUtils qw/uniq/;
use Data::Dumper;
my @x = (3,2);
my @y = (4,3);
print "unique results \n";
print Dumper([uniq(@x,@y)]);
print "sorted unique results\n";
print Dumper([sort uniq(@x,@y)]);
Выход
unique results
$VAR1 = [
3,
2,
4
];
sorted unique results
$VAR1 = [
2,
3,
3,
4
];
Так это выглядит, что-то не работает с Uniq. Я не понимал, почему.
Я запускал скрипт на языке Perl с -MO = Deparse и получил
use List::MoreUtils ('uniq');
use Data::Dumper;
use strict 'refs';
my(@x) = (3, 2);
my(@y) = (4, 3);
print "unique results \n";
print Dumper([uniq(@x, @y)]);
print "sorted unique results\n";
print Dumper([(sort uniq @x, @y)]);
Моя интерпретация, что Perl решил удалить скобки из Uniq (@ х, @ Y) и с использованием Uniq в зависимости от вида ,
Почему perl решил сделать это?
Как я могу избежать этих и подобных подводных камней?
Спасибо, David
Я не понял на 100 процентов, почему он не выполняет uniq заранее, а затем использует сортировку LIST, но я предполагаю, что он предпочитает форму SUBNAME LIST. Что означает знак +? –
@DavidMichaelGang да, проблема в том, что ваш код анализировался как «сортировать SUBNAME LIST». Унарный '+' запрещает эту интерпретацию и заставляет «нормальный» вызов 'uniq'. Важно помнить, что 'sort' не является подпрограммой - это ключевое слово, как' foreach' или 'grep'. – amon
'DWIM' терпит неудачу, так как можно было бы ожидать такого же поведения, как для' sort grep' или 'sort map' –