如何将字符串转换为变量(字符串变量 - > $ variable)?
或者用逗号分隔的变量列表然后转换为实际变量。
我有2个文件:
我需要根据字符串匹配rows文件中的整行,并根据列名文件命名每一行。
示例:
name,age,gender
mar,44,m
rich,49,m
glenn,22,m
现在我有一个变量字符串$who = 'glenn'
我将首先在 ROWS FILE 上匹配它。
然后我需要将其匹配的内容命名为实际变量,其名称基于 COLUMN NAMES FILE 。
输出:
$name = 'glenn';
$age = 22;
$gender = 'm';
我需要动态更改的内容,只需更新内容文件即可自动创建所需的变量和内容。
答案 0 :(得分:9)
你所要求的,不是你想要的。出于许多原因,这是一个坏主意,但这里概述了它们:http://perl.plover.com/varvarname.html
您需要的是哈希,特别是slice。
它有点像这样:
array
给出:
my @header = qw ( A B C );
my @values = qw ( X Y Z );
my %combined;
@combined{@header} = @values;
print Dumper \%combined;
(注意:哈希显然是UNORDERED,因此每次打印都会得到一个随机序列。这是设计的,因为它们应该通过键来访问)
关于你的数据:
$VAR1 = {
'C' => 'Z',
'A' => 'X',
'B' => 'Y'
};
然后,您可以从行访问单个元素,例如:
#!/usr/bin/env perl
use strict;
use warnings 'all';
open ( my $cols, '<', 'cols_file.txt') or die $!;
chomp ( my @cols = split /,/, <$cols> ); #just reads first line.
close ( $cols );
open ( my $rows, '<', 'rows_file.txt' ) or die $!;
while ( <$rows> ) {
chomp;
my %this_row;
@this_row{@cols} = split /,/;
push ( @all_rows, \%this_row );
}
close ( $rows );
print Dumper \@all_rows;