2010-02-17 34 views
6

Tôi vẫn đang cố gắng phân loại dereferencing băm của mình. Vấn đề hiện tại của tôi là bây giờ tôi đang đi qua một hashref cho một phụ, và tôi muốn dereference nó trong phụ đó. Nhưng tôi không tìm đúng phương pháp/cú pháp để làm điều đó. Trong phần phụ, tôi muốn lặp lại các khóa băm, nhưng cú pháp cho một hashref không giống như một băm, mà tôi biết cách làm.Làm cách nào để tôi xem xét tham chiếu băm Perl đã được chuyển đến một chương trình con?

Vì vậy, những gì tôi muốn là để làm điều này:

sub foo { 
    %parms = @_; 
    foreach $keys (key %parms) { # do something }; 
} 

nhưng với một hashref được thông qua tại thay vì một băm.

Bất kỳ con trỏ nào (không dự định chơi chữ) đều được chào đón.

Cảm ơn.

Trả lời

3

tôi havn't thực sự thử nghiệm mã vào lúc này, nhưng cách viết tự do bạn sẽ muốn làm một cái gì đó như thế này:

sub foo { 
    $parms = shift; 
    foreach my $key (keys %$parms) { # do something }; 
} 
+0

Sử dụng thay vì @_ đã thực hiện thủ thuật và tất nhiên, sử dụng vô hướng thay vì băm cho biến. Mã làm việc: sub foo { $ parms = shift; foreach $ key (phím% $ parms) {print "$ key: $$ parms {$ key} \ n"; } } Cảm ơn! – sgsax

+4

'$ parms -> {$ key}' có thể hơi được ưa thích với '$$ parms {$ key}' – toolic

+1

'shift' và' @ _' không liên quan. 'my ($ hashref) = @_;' cũng sẽ hoạt động. –

2

Dưới đây là một cách để dereference một ref băm truyền cho một phụ:

use warnings; 
use strict; 

my %pars = (a=>1, b=>2); 
foo(\%pars); 
sub foo { 
    my ($href) = @_; 
    foreach my $keys (keys %{$href}) { print "$keys\n" } 
} 

__END__ 
a 
b 

cũng Xem References quick referenceperlreftut

+1

Cảm ơn các liên kết. Tôi đã nhìn vào trang perlreftut, trong số những người khác, nhưng tôi vẫn cố gắng tìm ra tất cả. – sgsax

2

sub foo 
{ 
    my $params = $_[0]; 
    my %hash = %$params; 
     foreach $keys (keys %hash) 
     { 
     print $keys; 
     } 
} 

my $hash_ref = {name => 'Becky', age => 23}; 

foo($hash_ref); 

cũng giới thiệu tốt về tài liệu tham khảo là here.

+0

Cảm ơn bạn đã liên kết. Tôi đã sử dụng nó như một tài liệu tham khảo, nhưng tôi vẫn chưa hoàn toàn nắm bắt được nó. – sgsax

1
#!/usr/bin/perl 
use strict; 

my %params = (
    date => '2010-02-17', 
    time => '1610', 
); 

foo(\%params); 

sub foo { 
    my ($params) = @_; 
    foreach my $key (keys %$params) { 
     # Do something 
     print "KEY: $key VALUE: $params{$key}\n"; 
    }; 
} 
+0

Eep, không thấy công cụ trả lời cho đến bây giờ. ; x –

+0

Tôi muốn đặt tên của anh ấy tốt hơn (đặt tên cho hashref là href). –

Các vấn đề liên quan