كيف يمكنني مرجع تجزئة بيرل تم نقله إلى روتين فرعي؟

StackOverflow https://stackoverflow.com/questions/2282987

  •  21-09-2019
  •  | 
  •  

سؤال

ما زلت أحاول فرز تجزئة التجزئة. مشكلتي الحالية هي أنني أعمل الآن على الهاشرف إلى فرعي ، وأريد أن أتعرض لها داخل هذا الفرع. لكنني لا أجد الطريقة/بناء الجملة الصحيحة للقيام بذلك. ضمن الفرع ، أريد تكرار مفاتيح التجزئة ، لكن بناء الجملة لـ Hashref ليس هو نفسه تجزئة ، وهو ما أعرفه.

إذن ما أريده هو أن أفعل هذا:

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

ولكن مع تمرير هاشف بدلاً من التجزئة.

أي مؤشرات (التورية غير المقصودة) هي موضع ترحيب.

شكرًا.

هل كانت مفيدة؟

المحلول

لم أقم باختبار الرمز في هذا الوقت ، لكن كتابة Freehand سترغب في القيام بشيء مثل هذا:

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

نصائح أخرى

فيما يلي إحدى الطرق إلى مرجع التجزئة الذي تم نقله إلى Sub:

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

أنظر أيضا المراجع مرجع سريع و perlreftut


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

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

foo($hash_ref);

أيضا مقدمة جيدة حول المراجع هو هنا.

#!/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";
    };
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top