【发布时间】:2014-08-12 02:22:32
【问题描述】:
我的问题是我有一个带有一些刺的数组
EX: $line = { devtmpfs 8234932 144 8234788 1% /dev }
@temp_arr=split(" ",$line);
如何搜索具有子字符串 '%' 的字符串,我想将该字符串分配给变量
ie, My var1 = 1% (according to above case)
提前致谢。
【问题讨论】:
我的问题是我有一个带有一些刺的数组
EX: $line = { devtmpfs 8234932 144 8234788 1% /dev }
@temp_arr=split(" ",$line);
如何搜索具有子字符串 '%' 的字符串,我想将该字符串分配给变量
ie, My var1 = 1% (according to above case)
提前致谢。
【问题讨论】:
使用来自List::Util 模块的first。
use List::Util qw(first);
my $line = q{ devtmpfs 8234932 144 8234788 1% /dev };
my $found = first { /\%\z/ } split " ", $line;
【讨论】:
我不确定我是否完全理解您的问题。
这样可以吗?
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%,因为在此示例中,它是唯一以% 结尾的字符串
【讨论】:
使用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
【讨论】:
你的语法错误。
$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";
【讨论】:
或者,使用正则表达式提取百分比:
my ($percent) = $line =~ /(\d+%)/;
【讨论】:
你可以使用grep:
my $line = ' devtmpfs 8234932 144 8234788 1% /dev ';
my ($found) = grep /\%$/, split ' ', $line;
或者如果你想指定一个默认值,或者如果没有找到该值,则使用正则表达式:
my $found = $line =~ /(\S*\%)(?!\S)/ ? $1 : warn "Value not found";
【讨论】: