如何将原始字符串转换为变量(变量 - > $变量)?

Dig*_*r 2 2 linux string variables perl

如何将字符串转换为变量(字符串变量 - > $ variable)?

或者用逗号分隔的变量列表然后转换为实际变量.

我有2个文件:

  • 列名文件
  • 行文件

我需要根据字符串匹配rows文件中的整行,并根据列名文件命名每一行.

例:

COLUMN NAMES文件内容

name,age,gender
Run Code Online (Sandbox Code Playgroud)

ROWS文件内容

mar,44,m
rich,49,m
glenn,22,m
Run Code Online (Sandbox Code Playgroud)

现在我有一个变量字符串 $who = 'glenn'

我将首先在ROWS FILE上匹配它.

然后我需要将其匹配的内容命名为一个实际变量,其名称基于COLUMN NAMES FILE.

输出:

$name = 'glenn';
$age = 22;
$gender = 'm';
Run Code Online (Sandbox Code Playgroud)

我需要动态更改的东西,只需更新内容文件即可自动创建所需的变量和内容.

Sob*_*que 9

你要求的不是你想要的.出于许多原因,这是一个坏主意,但这里概述了它们:http://perl.plover.com/varvarname.html

你需要的是一个哈希,特别是一个切片.

它有点像这样:

my @header = qw ( A B C );
my @values = qw ( X Y Z );
my %combined;
@combined{@header} = @values; 
print Dumper \%combined; 
Run Code Online (Sandbox Code Playgroud)

得到:

$VAR1 = {
          'C' => 'Z',
          'A' => 'X',
          'B' => 'Y'
        };
Run Code Online (Sandbox Code Playgroud)

(注意:哈希显然是UNORDERED,因此每次打印时都会得到一个随机序列.这是设计的,因为它们应该通过键来访问)

所以你的数据:

#!/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; 
Run Code Online (Sandbox Code Playgroud)

然后,您可以从行访问单个元素,例如:

foreach my $row ( @all_rows ) {
    print $row -> {name},"\n";
 }
Run Code Online (Sandbox Code Playgroud)