Perl 如何从以下文件的内容形成哈希?

Perl 如何从以下文件的内容形成哈希?,perl,Perl,我以前没有使用过哈希,但我有两个文件,如下所示。如何将其内容放入哈希中,使PIO_M_U_PIO55_1,PIO_M_U U_PIO55_2等成为键,并将896,895作为其值,以便在其他文件中轻松访问它。类似地,对于第二个文件UART\U 10,UART\U 13etc成为键,而PIO\U M\U\U PIO55\U 1etc作为其值,这样我就可以通过UART\U 10直接访问896。任何其他方式也欢迎 #define PIO_M_U_PIO55_1 896 #defin

我以前没有使用过哈希,但我有两个文件,如下所示。如何将其内容放入哈希中,使
PIO_M_U_PIO55_1,PIO_M_U U_PIO55_2
等成为键,并将
896,895
作为其值,以便在其他文件中轻松访问它。类似地,对于第二个文件
UART\U 10,UART\U 13
etc成为键,而
PIO\U M\U\U PIO55\U 1
etc作为其值,这样我就可以通过
UART\U 10
直接访问
896
。任何其他方式也欢迎

 #define PIO_M_U_PIO55_1          896
 #define PIO_M_U_PIO55_2          895
 #define PIO_M_U_PIO57_3          894
 #define PIO_M_U_PIO55_4          893
 and so on.....huge file
 Similarly one more file 
  #define UART_10       PIO_M_U_PIO55_1
  #define UART_13       PIO_M_U_PIO55_2
  #define UART_11       PIO_M_U_PIO57_3
   and so on ...

你有两件事要做。解析一个文件,并插入到散列中。在基本层面上,它是这样的:

use strict;
use warnings;
use Data::Dumper;

my %defines;

open ( my $input_fh, "<", "input-file-name" ) or die $!;
while ( <$input_fh> ) {
    my ( $key, $value ) = ( m/^\s*#\s*define\s+(\w+)\s+(\w+)/  );
    $defines{$key} = $value;
}

print Dumper \%defines; 
使用严格;
使用警告;
使用数据::转储程序;
我的%定义;

open(my$input_fh),正则表达式可以使用一些细化:
m/^\s*#\s*define\s+(\w+)\s+(\w+)/
(虽然它仍然没有完全遵循C预处理器的规范)好的,更新了。我们的目标是更多地说明这个概念,但拥有一个更完整的模式可能会更好。@sobrique创建哈希现在似乎很容易:)…谢谢工作…我想问一件事。(\w+)这里代表关键,第二件(\w+)代表价值??因此他们被识别为()?我怀疑有人正在进行一场运动,对那些回答了他们认为太懒的问题的人投反对票。(所以+1是本着平衡的精神提供的——我也回答了,因为我觉得这是一个新手在寻找一些基本的东西,而不是一个“请为我做我的工作”的帖子)
use strict;
use warnings;

my %hash;

while (<>) {
    my ( $key, $value ) = /^\s*#\s*define\s+(\w+)\s+(\w+)/;
    $hash{$key} = $value;
}

# substitute each value by other value if there is some present
# support transitivity
for my $value ( values %hash ) {
    $value = $hash{$value} while exists $hash{$value};
}

# print out hash content as definitions with final values
print "#define $_ $hash{$_}\n" for sort keys %hash;
for my $value ( values %hash ) {
    my %seen;    # cycle detection, stop when $value content is seen twice
    $value = $hash{$value} while exists $hash{$value} and not $seen{$value}++;
}