簡體   English   中英

如何將變量作為方法傳遞給Perl哈希引用?

[英]How do I pass a variable as a method to a Perl hash reference?

首先,關於我所說的各種Perl語言構造,請在標題和正文中更正我的語言!

我在將變量傳遞給哈希引用時遇到麻煩。 具體來說,我正在使用JSON模塊解碼一些JSON數據,然后訪問該數據的特定部分。

這是我的JSON數據示例:

[
 {
  label:"Blah",
  data:[
     [ 2112, 1 ]
  ]
 }
]

現在這是我的Perl代碼:

use JSON;
use Data::Dumper;
my $json = "*JSON data above*";
my $decoded_json = decode_json($json);

# This works, prints out '2112':
print( Dumper( $decoded_json->[0]{'data'}[0][0] ));

# What I'd like to do:
$datapath = "[0]{'data'}[0][0]";
print( Dumper( $decoded_json->$datapath ));

有沒有辦法做到這一點? 謝謝!

盡管可以使用eval進行此操作,但是該方法存在問題。

我懷疑這對於您的基本問題是一個更好的答案:

use Data::Diver;
my @datapath = ( 0, 'data', 0, 0 );
print( Dumper( Data::Diver::Dive($decoded_json, @datapath) ));

通常這是不可能的,但是有一些解決方法:

  1. 做一個字符串eval

     my $val = do { local $@; my $val = eval "\\$decoded_json->$datapath"; die $@ if $@; $val; }; 

    當然,以這種方式使用eval是不受歡迎的。

  2. 定義一個遍歷數據結構的函數:

     sub walk { my $data = shift; while (@_) { my $index = shift; if (ref $data eq 'HASH') { $data = $data->{$index}; } elsif (ref $data eq 'ARRAY') { $data = $data->[$index]; } else { die qq(Wanted to use index "$index", but "$data" is neither hash nor array); } } return $data; } my $val = walk($decoded_json, 0, 'data', 0, 0); 

    當然,這將因對象過載而失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM