Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Perl中的Uniq函数不起作用_Arrays_Perl_List_Grep_Uniq - Fatal编程技术网

Arrays Perl中的Uniq函数不起作用

Arrays Perl中的Uniq函数不起作用,arrays,perl,list,grep,uniq,Arrays,Perl,List,Grep,Uniq,我正在使用活动Perl 5.20.2 uniq函数应用于数组时,返回具有重复值的完整数组。请参考下面的代码,如果有任何问题,请告知,或者通过其他方式从列表中获取唯一值 use List::MoreUtils qw(uniq); print "@$_\n" for @urls; @unique1 = uniq(@urls); print "@$_\n" for @unique1; 输出 URL数组值-6 @独特的1-6 6 6 我甚至不走运地使用了下面的功能——它们可以从谷歌搜索得到 请

我正在使用活动Perl 5.20.2

uniq函数应用于数组时,返回具有重复值的完整数组。请参考下面的代码,如果有任何问题,请告知,或者通过其他方式从列表中获取唯一值

use List::MoreUtils qw(uniq);

print "@$_\n" for @urls;

@unique1 = uniq(@urls);

print "@$_\n" for @unique1;
输出

URL数组值-6

@独特的1-6 6 6


我甚至不走运地使用了下面的功能——它们可以从谷歌搜索得到


请学习如何提供MCVE()或 SSCCE()-同一基本思想的两个名称和链接

uniq
功能不起作用。这里是一个完整的、略微固定的代码变体,它被转换成了MCVE

listuniq.pl
打印“@$\n”
中的
@
符号导致投诉,因为
使用严格。除非你真的在计划一些非常奇特的事情,否则你需要(a)使用
严格
使用警告和(b)注意它们

示例运行 其他可能性
这就是Perl,TMTOWTDI——有多种方法可以做到这一点。这包括编写产生意外结果的代码的多种方法——请参阅另一种方法,并参阅另一种答案,以了解编写导致混乱结果的代码的其他可能方法。因为您没有提供MCVE,所以我们很难(基本上是徒劳的)猜测您采取了哪种选择来获得意外的结果。通过提供一个包含再现所见结果所需的最少代码的问题,您将始终提高在SO(或任何类似网站)上获得最相关答案的机会。

您的
@URL
数组中似乎有十二个匿名数组,其中包含单个元素6。换句话说,它看起来像这样

my @urls = ( [6], [6], [6], [6], [6], [6], [6], [6], [6], [6], [6], [6] );
uniq
的作用是,如果多余元素的字符串值与前一个元素的字符串值相同,则从列表中删除多余元素。数组引用的字符串值类似于
array(0x1f6c6e4)

如果您的数组包含十二个对同一匿名数组的引用,则
uniq
将删除除一个之外的所有引用。但是看起来有12个不同的数组恰好包含相同的值,
uniq
不会注意到这一点

很难知道如何提供帮助,因为
[6]
不太像URL,数组中的实际数据可能非常不同。也许您的代码中有一个bug,或者您真的需要比较所有辅助数组的内容,但我们无法判断


我建议您发布另一个问题,该问题显示了
@url
数组的转储(使用),并描述了您希望如何使用它。它还可以帮助您阅读,这样我们这些帮助您的人就不会对真实情况产生如此多的怀疑

您可以提供一个完整的示例程序来演示您的问题。您能否编辑示例代码以显示如何初始化
@url
?看起来
@url
是一个值为“6 6 6 6 6 6”的列表,否则每个
6
之间会有换行符……“Perl中的Uniq函数不工作”。。。是的。认真地其他人也用过。你认为这样的问题没有被注意到吗?是的,偶尔,但更多的时候,不是这样,就是他有一个值,“6 6 6 6”。这更可能是因为他在第一个循环中,用尾随的换行符打印数组的每个元素,而输出中只有一个换行符。@Kusalananda:是的。这将是一个单独的匿名数组。谢谢你,乔纳森。我会考虑你以后的所有评论。你的代码可以工作。我已经开发了另一个工作环境,它也在工作。
#!/usr/bin/env perl
use strict;        # Always use these
use warnings;

my @urls = ( 6, 6, 6, 6, 6, 6, 6, 6, 6 );

use List::MoreUtils qw(uniq);

print "Before:\n";
print "$_\n" for @urls;    # Note the @ is missing

my @unique1 = uniq(@urls);

print "After:\n";
print "$_\n" for @unique1; # Note the @ is missing

@urls = ();

push @urls, "http://www.google.com/", "http://www.yahoo.com/" for (1..6);

print "Before:\n";
print "$_\n" for @urls;

@unique1 = uniq(@urls);

print "After:\n";
print "$_\n" for @unique1;
$ perl listuniq.pl | so
Before:
6
6
6
6
6
6
6
6
6
After:
6
Before:
http://www.google.com/
http://www.yahoo.com/
http://www.google.com/
http://www.yahoo.com/
http://www.google.com/
http://www.yahoo.com/
http://www.google.com/
http://www.yahoo.com/
http://www.google.com/
http://www.yahoo.com/
http://www.google.com/
http://www.yahoo.com/
After:
http://www.google.com/
http://www.yahoo.com/
$
my @urls = ( [6], [6], [6], [6], [6], [6], [6], [6], [6], [6], [6], [6] );