我有一个格式的字符串:
my $string = "this -is -a -test=2 -value=1 -data=num -string=8";
基本上,这是某种cmd行格式,我们有一个选项,后跟一些值。 我想拆分这个字符串,以便创建一个哈希,以便存储每个选项及其值。
我的哈希应该是这样的:
my %hash = (
"this" => "",
"is" => "",
"test" => "2",
"string" => "8",
);
这可以在perl的一行中完成吗?
答案 0 :(得分:1)
您可以使用正则表达式执行此操作。请注意,没有is
之类的值的选项将存储为undef
,而使用empty=
之类的空参数的选项将存储为空字符串
找不到您的参数this
,因为它不以连字符-
开头
use strict;
use warnings;
my $string = "this -is -a -test=2 -empty= -value=1 -data=num -string=8";
my %options = $string =~ /-(\w+)(?:=(\S*))?/g;
use Data::Dump;
dd \%options;
{
a => undef,
data => "num",
empty => "",
is => undef,
string => 8,
test => 2,
value => 1,
}
答案 1 :(得分:0)
虽然使用正则表达式可以在这里工作,但您应该考虑使用Getopt::Long
进行任何非平凡的命令行参数解析。