كيف يمكنني تمرير العناصر في مرجع صفيف بيرل كوسائط منفصلة إلى روتين فرعي؟

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

  •  21-09-2019
  •  | 
  •  

سؤال

لدي قائمة تحتوي على حجج أريد نقلها إلى وظيفة. كيف أسمي هذه الوظيفة؟

على سبيل المثال ، تخيل أن لدي هذه الوظيفة:

sub foo {
  my ($arg0, $arg1, $arg2) = @_;
  print "$arg0 $arg1 $arg2\n";
}

ودعنا نقول لدي:

my $args = [ "la", "di", "da" ];

كيف أتصل foo دون كتابة foo($$args[0], $$args[1], $$args[2])?

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

المحلول

هذا يجب أن يفعل ذلك:

foo(@$args)

هذا ليس في الواقع apply وظيفة. هذا بناء الجملة مجرد إزالة مرجع الصفيف مرة أخرى إلى صفيف عادي. رجل بيرلف يخبرك بالمزيد عن الأوقات.

نصائح أخرى

أنت مرجع صفيف عن طريق الالتصاق @ امامها.

foo( @$args );

أو إذا كنت تريد أن تكون أكثر وضوحًا:

foo( @{ $args } );

جرب هذا:

foo(@$args);
foo(@$args);

أو ، إذا كان لديك إشارة إلى foo:

my $func = \&foo;
...
$func->(@$args);

انه سهل. foo ({{$ args})

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top