拆分字符串并以perl形式存储在哈希中

时间:2015-07-20 05:13:30

标签: perl

我有一个格式的字符串:

my $string = "this -is -a -test=2 -value=1 -data=num -string=8";

基本上,这是某种cmd行格式,我们有一个选项,后跟一些值。 我想拆分这个字符串,以便创建一个哈希,以便存储每个选项及其值。

我的哈希应该是这样的:

my %hash = (
"this" => "",
"is"   => "",
"test" => "2",
"string" => "8",
);

这可以在perl的一行中完成吗?

2 个答案:

答案 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进行任何非平凡的命令行参数解析。

perldoc Getopt::Long