1.数组相等,数组成员相同,位置也相同

一般的如果判断@array1 等于 @array2

a.数组长度相同 $#array1=$#array2, 比较数组长度,不能使用length函数,length只适用string类型

数组参数传递,不能直接传递

sub compare()
{
my $flag=;
my ($first,$second)=@_;
if (@$first==@$second) # the number of the array , don't use length()
{
for(my $i=;$i<@$first;$i++)
{
if($first->[$i]!=$second->[$i])
{
$flag=;
print "$first->[$i]==$second->[$i]\n";
}
}
}
else
{
$flag=;
}
if( $flag==)
{
print "two arrays are not equal\n";
}
else
{
print "two arrays are equal\n";
}
}

my @a=(1,2,3,4,5);
my @b=(1,2,3,4,5);
&compare(\@a,\@b);

输出:two arrays are  equal

my @a=(1,2,3,4,5);
my @b=(1,2,3,4,5,6);
&compare(\@a,\@b);

输出:two arrays are not equal

2.以上代码可以简化

使用智能匹配 ~~

注意 :智能匹配是从5.10.0开始的

所以要require 5.10.0

@a ~~ @b 两个数组相同

$x ~~ @a   x在数组a中

$x ~~%hash  相当于 exists $hash{$x};

#/usr/bin/perl -w
use strict;
require 5.10.;
sub compare()
{
my $flag=;
my ($first,$second)=@_;
if( @$first ~~ @$second )
{
print "two arrays are equal\n"; }
else
{
print "two arrays are not equal\n";
}
}

3.使用 模块

#!/usr/bin/perl
use strict; use Array::Compare;
my @array1=..;
my @array2=..;
my @array3=..;
print "compare array1 and array2\n";
&check(\@array1,\@array2);
print "compare array1 and array3\n";
&check(\@array1,\@array3); sub check
{
my ($ref1,$ref2)=@_;
my $comp=Array::Compare->new;
if($comp->compare($ref1,$ref2))
{
print "the two arrays are the same\n";
}
else
{
print "the two arrays not the same\n";
}
}

运行结果:

D:\>perl suzu.pl
compare array1 and array2
the two arrays not the same
compare array1 and array3
the two arrays are the same

perl 判断数组相等的三种方法的更多相关文章

  1. C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?

    C#中??和?分别是什么意思? 在C#中??和?分别是什么意思? 1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.例如:string str=null; ...

  2. 判断图连通的三种方法——dfs,bfs,并查集

    Description 如果无向图G每对顶点v和w都有从v到w的路径,那么称无向图G是连通的.现在给定一张无向图,判断它是否是连通的. Input 第一行有2个整数n和m(0 < n,m < ...

  3. 数组k平移三种方法(java)

    上代码,本文用了三种方法实现,时间复杂度不一样,空间复杂度都是o(1): public class ArrayKMove { /** * 问题:数组的向左k平移,k小于数组长度 * @param ar ...

  4. 【JS】JS数组添加元素的三种方法

    1.push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度. 1).语法: arrayObject.push(newelement1,newelement2,....,newelement ...

  5. js数组去重的三种方法

    <script type="text/javascript"> /*// 第一种冒泡法删除 var arr=[1,2,2,78,3,456,456]; for(var ...

  6. js 数组去重的三种方法(unique)

    方法一: Array.prototype.unique=function(){ var arr=[];//新建一个临时数组 for(var i=0;i<this.length;i++){//遍历 ...

  7. 数组去重的三种方法及from方法

    直接上代码: var str="adbbckddwerivka"; var arr=str.split(""); console.log(arr); //ind ...

  8. Jquery判断Checkbox是否选中三种方法

    方法一:if ($("#checkbox-id")get(0).checked) {    // do something} 方法二:if($('#checkbox-id').is ...

  9. 数组去重的三种方法 es6

    [1,2,3,4,5,6,7,8,9,2,2,3,3,4,1].filter(function(el,index,arr){ return (index === arr.indexOf(el)); } ...

随机推荐

  1. VS Code 开发asp.net core 遇到的坑

    摘要 微软发布.NET Core 1.0,ASP.NET Core 1.0 与 Entity Framewok 1.0也有一段时间了,一直没进行这方面的学习,节前公司让调研这方面的可行性.所以还是从最 ...

  2. ASP.NET MVC Razor语法

    ASP.NET MVC Razor语法 (一) 关于_ViewStart.cshtml文件     使用Razor模板引擎的话,会自动生成一个_ViewStart.cshtml文件.事实上,_View ...

  3. Hibernate 应用

    完善的持久化层应该达到以下目标: 1.代码可重用性高,能够完成所有的数据库访问操作. 2.如果有需要的话,能够支持多种数据库平台. 3.具有相对独立性,当持久化层的实现发生变化,不会影响上层的实现. ...

  4. firefox浏览器不能使用window.close的解决方案

    javascript中window.close()函数用来关闭窗体,而且IE.google.firefox浏览均支持,但由于firefox浏览器dom.allow_scripts_to_close_w ...

  5. 大数据之Ganglia安装1

    0.前期准备修改主机名.ip.iptables关闭:时间同步:ntpdate -s time.windows.com;软件准备ganglia-3.7.1.tar.gz.ganglia-web-3.7. ...

  6. linux 使用rpm安装软件时,遇到"warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY "错误

    建议的做法: warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY    网上资料说这是 ...

  7. Android常用的工具类

    主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils. Prefe ...

  8. linux 下 修改mysql账号密码

    1.root用户登录到mysql数据库代码示例:/usr/local/mysql/bin/mysql -u root -p (输入密码进入mysql)2.进入mysql,输入:代码示例:use mys ...

  9. Unity手游之路<七>角色控制器

    Unity手游之路<七>角色控制器 我们要控制角色的移动,可以全部细节都由自己来实现.控制角色模型的移动,同时移动摄影机,改变视角.当然Unity也提供了一些组件,可以让我们做更少的工作, ...

  10. Android学习笔记(九)——布局和控件的自定义

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! View是 Android中一种最基本的 UI组件,它可以在屏幕上绘制一块矩形区域,并能响应这块区域的各种事件 ...