我试过搜索已经问到的问题,但似乎找不到任何东西。我确信它非常简单,但我对Perl来说是全新的。
我要做的是将字符串中的字符删除到某一点。例如,我有:
参数1:0xFFFF
我想要做的是删除“Parameter1:”并留下“0xFFFF”。如果有人可以帮助并简单解释所使用的运算符,那就太好了。
答案 0 :(得分:2)
听起来你需要substr功能。
#!/usr/bin/perl
use strict;
use warnings;
my $string = 'Parameter1 : 0xFFFF';
my $fragment = substr $string, 12;
print " string: <$string>\n";
print "fragment: <$fragment>\n";
答案 1 :(得分:1)
s/.*:\s*//;
或
$s =~ s/.*:\s*//;
这将删除所有内容,包括第一次出现:
后跟零个或多个空格字符。 $s =~
$s
已应用于$_
;没有它,它适用于{{1}}。
答案 2 :(得分:1)
您是否考虑使用Config::Std之类的内容?
以下是如何手动解析配置文件:
#!/usr/bin/perl
use strict; use warnings;
my %params;
while ( my $line = <DATA> ) {
if ($line =~ m{
^
(?<param> Parameter[0-9]+)
\s*? : \s*?
(?<value> 0x[[:xdigit:]]+)
}x ) {
$params{ $+{param} } = $+{value};
}
}
use YAML;
print Dump \%params;
__DATA__
Parameter1 : 0xFFFF
Parameter3 : 0xFAFF
Parameter4 : 0xCAFE
使用Config::Std
:
#!/usr/bin/perl
use strict; use warnings;
use Config::Std;
my $config = do { local $/; <DATA> };
read_config \$config, my %params;
use YAML;
print Dump \%params;
__DATA__
Parameter1 : 0xFFFF
Parameter3 : 0xFAFF
Parameter4 : 0xCAFE
当然,在现实生活中,你会将文件名传递给read_config
而不是诋毁它。
答案 3 :(得分:1)
我喜欢拆分这些参数/值对。
my $str = "Parameter1 : 0xFFFF";
my ($param, $value) = split /\s*:\s*/, $str, 2;
请注意在分割中使用LIMIT,它将分割限制为两个字段(如果值中包含其他冒号)。