×

perl数组操作

perl数组操作(perl 删除数组元素的几种方法小结)

admin admin 发表于2022-12-26 15:52:25 浏览42 评论0

抢沙发发表评论

本文目录

perl 删除数组元素的几种方法小结


1. 用grep函数
函数名 grep
调用语法 @foundlist = grep (pattern, @searchlist);
解说 与同名的UNIX查找工具类似,grep函数在列表中抽取与指定模式匹配的元素,参数pattern为欲查找的模式,返回值是匹配元素的列表。
例子 @list = (“This“, “is“, “a“, “test“);
@foundlist = grep(/^[tT]/, @list);
结果 @foundlist = (“This“, “test“);
2. 用map函数
函数名 map
调用语法 @resultlist = map (expr, @list);
解说 此函数在Perl5中定义,可以把列表中的各个元素作为表达式expr的操作数进行运算,其本身不改变,结果作为返回值。在表达式expr中,系统变量$_代表各个元素。
例子
1、@list = (100, 200, 300);
@results = map ($_+1, @list);
2、@results = map (&mysub($_), @list);
结果 1、(101, 201, 301)
2、无
3. 用splice或者delete
函数名 splice
调用语法 @retval = splice (@array, slipelements, length, @newlist);
解说:拼接函数可以向列表(数组)中间插入元素、删除子列表或替换子列表。参数skipelements是拼接前跳过的元素数目,length是被替换的元素数,newlist是将要拼接进来的列表。当newlist的长度大于length时,后面的元素自动后移,反之则向前缩进。因此,当length=0 时,就相当于向列表中插入元素,而形如语句
splice (@array, -1, 0, “Hello“);
则向数组末尾添加元素。而当newlist为空时就相当于删除子列表,这时,如果length为空,就从第skipelements个元素后全部删除,而删除最后一个元素则为:splice (@array, -1);这种情况下,返回值为被删去的元素列表。
两者都可以按照index直接删除array或者hash的元素。但是delete删除元素后, index后面的元素并不会主动往前移动,该元素删除后,在array还留有一个undef的元素,显然删除得不够干净。                         


如何使用写perl脚本,将在数组a里面的字符在数组b里面的数据选出来


少侠,你的数组定义有问题,应该是y @a=(“a“,“b“,“c“);和@b=(“a“,“d“,“e“,“f“);
其他的好像没什么问题
望采纳
具体代码如下:
use strict;
my @a=(“a“,“b“,“c“);
my @b=(“a“,“d“,“e“,“f“);
print “@a\n“;
foreach my $a(@a)
{
foreach my $b(@b)
{
if($a eq $b)
{
print “$a\n“;
}
}
}

perl中如何定义数组参数


PERL的参数可以使用数组,调用的时候要在%或者@前面加上\,否则就把数组的值传递给函数了,下面是调用的例子:
Run(\%o, $ch, $num);
这个函数Run使用三个参数,第一个是数组类型,函数定义就没什么特殊的:
sub Run {
my($o, $ch, $num) = @_;
my $th = IO::Socket::INET-》new(’PeerAddr’ =》 $o-》{’tohost’}, ’PeerPort’ =》 $o-》{’toport’});
my $read_counter=0;
}
补充:
你的问题我以为是问PERL函数的参数。
PERL使用下面的变量获取命令行参数:$#ARGV表示参数的个数,$ARGV、$ARGV、$ARGV……依次表示各个参数

怎么用perl 输出一个二维数组


可以用一个foreach语句输出二维数组

例如二维数组:@arr=([0,0,0,0,0],
                        [0,0,0,0,0],
                        [0,0,0,0,0],
                        [0,0,0,0,0],);

foreach (@arr){
print join(’ ’, @$_), “\n“;
}

请问perl里面的数组操作函数push之类的是如何导致传入的数组产生变化


dup_name(“$name“) :返回字符串,
$rules-》:在散列rules中找到上面返回的字符串为key对应的value,该value做为一个数组的名字。
push @{$rules-》}, ““; :在该数组中push一个空值(““中为空值,如果里面有其他值的话,就将““中的值push到该数组中了)。
这句的整体的数据结构就是在散列rules中定义了若干的名字(key),每个名字对应一个数组名(value),在程序运行时可以将值动态的push到指定的数组中
请参考

如何在PERL中打印整个数组


打印数组一般有三种方法:
方法一:print “@array
“;
方法二:for $row (@array) {
print “@$row
“;}方法三:for $row (0..$#array) {
方法二和方法三的输出结果:cubsredsyankeesdodgers

perl如何将一行中的数放入到数组中


如果是将这一行插入到数组的最后一个单元中,直接使用push(@array,’值’),就可以了;
看你上面的内容应该是将不同的单词放到数组的不同单元中,且提供的内容“Magnoliophyta; Ericales; Actinidiaceae; Actinidia”是以半角“;”做为分隔的,那么使用@array=split(/;/,’Magnoliophyta; Ericales; Actinidiaceae; Actinidia’)就可以了;
例如(本例中用空格做为分隔):
my $crt=“Magnoliophyta; Ericales; Actinidiaceae; Actinidia“;
my @array=split(/\s/,$crt);
结果:
@array=’Magnoliophyta;’;
@array=’Ericales;’;
@array=’Actinidiaceae;’;
@array=’Actinidia’;

Perl语言中,数组和列表有什么区别


数组(array)是可以随时存取的, 但列表(list)是唯读或你自己写下去的. 如:
这边是 array(变量) --》 @array = ( 1 .. 10 ) 《-- 这边是 list(你自己写下去的)
以上就是将 list 赋值给 array.
push @array, 11 ; # 你可以对 array 做这样的操作,
push ( 1,2,3 ), 4 ; # 但不能这样, list 就是唯除的, 不能中途改变
foreach ( @array ) { print } ;
此时, @array 将当成 list 用, 你无法中途改变回圈中 $_ 的初始值

perl子程序返回多个数组到主程序中多个数组


sub choose(){
my (@c1, @c2, @c3);
@c1 = @_;
@c2 = sort @_;
@c3 = reverse @_;
return (\@c1,\@c2,\@c3);
}
my @arr = (1,2,3,5,4);
my (@a,@b,@c);
my @refs = &choose(@arr);
@a = @{$refs};
@b = @{$refs};
@c = @{$refs};
print “@a\n@b\n@c\n“;
说明:首先perl中只能对简单的列表赋值给变量列表,而不能,列表赋值给列表组成的列表,比如@arr = (1,2,3);这个是可以的,($a,$b) = ($b, $a);这个也对, 但是(@arr1, @arr2) = (@arr2, @arr1); 这个就错了,原因在于perl的列表是贪婪的, 也就是说 @arr1会尽可能的接受后面的数据,而(@arr2,@arr1)本身就是一个大的列表, 就全部被@arr1接受了,而@arr2为空,唯一的办法就是用变量形式来接受具体数据。所以($ref_a1, $ref_a2) = (\@a1, \@a2);这种形式是可以的。
可能你要学习一下 perl中的引用了,类似于c语言中的指针和c++中的引用;接着上面的例子, 要用数组@a1, 只要写成 @{ $ref_a1 } 就相当于@a1了,要取第一个元素,$a1 , ${ $ref_a1 } ,只需要把前面的@改成$就可以了。