我的问题是我有一个带有一些刺痛的数组
EX: $line = { devtmpfs 8234932 144 8234788 1% /dev }
@temp_arr=split(" ",$line);
如何搜索哪个字符串有子字符串'%'我想将该字符串分配给变量
ie, My var1 = 1% (according to above case)
提前致谢。
答案 0 :(得分:4)
使用first模块中的List::Util。
use List::Util qw(first);
my $line = q{ devtmpfs 8234932 144 8234788 1% /dev };
my $found = first { /\%\z/ } split " ", $line;
答案 1 :(得分:1)
我不确定我完全理解你的问题。
这可以胜任吗?
use strict;
use warnings;
my @arr = qw(foo ba%r baz%);
my $count = 0;
foreach(@arr){
chomp;
$count++;
my $element = ($count -1);
print "Element number $element contains '%': $_\n" if /%$/;
}
这将打印Element number 2 contains '%': baz%
,如此示例中唯一以%
答案 2 :(得分:0)
使用List::MoreUtils
模块。基于this answer。
#!/usr/bin/env perl
use strict;
use warnings;
use List::MoreUtils qw(firstidx);
my $line = "devtmpfs 8234932 144 8234788 1% /dev";
my @temp_arr = split(" ", $line);
my $i = firstidx { $_ =~ /%$/ } @temp_arr;
printf "String: %s, Index: %i\n", $temp_arr[$i], $i;
__END__
输出:
String: 1%, Index: 4
答案 3 :(得分:0)
你的语法错了。
$line = { devtmpfs 8234932 144 8234788 1% /dev }
应该是
$line = q{ devtmpfs 8234932 144 8234788 1% /dev };
无论如何解决方案是
#!/usr/bin/perl
use strict;
use warnings;
my $line = q|devtmpfs 8234932 144 8234788 1% /dev|;
my @temp_arr = split(" ",$line);
my $var;
foreach (@temp_arr){
if($_ =~ /%$/){
$var = $_;
}
}
print "Result: $var";
<强> Demo 强>
答案 4 :(得分:0)
或者,使用正则表达式提取百分比:
my ($percent) = $line =~ /(\d+%)/;
答案 5 :(得分:0)
您可以使用grep
:
my $line = ' devtmpfs 8234932 144 8234788 1% /dev ';
my ($found) = grep /\%$/, split ' ', $line;
如果要指定默认值,请使用正则表达式;如果未找到该值,则使用正则表达式警告:
my $found = $line =~ /(\S*\%)(?!\S)/ ? $1 : warn "Value not found";