Как я могу запустить динамический код в Perl? - PullRequest
0 голосов
/ 25 сентября 2010

У меня есть вопрос, касающийся динамического кода Perl.Есть ли конструкция в Perl, где я мог бы использовать для выполнения кода.

Например,

$command = " some command";
$perl -> execute($command);

$command изменения во время выполнения.Извините за мою терминологию.Я не знаю, как объяснить это иначе.

Я пытаюсь сделать это: у меня есть функция, которая выполняет некоторую команду для каждой ссылки в массиве.

 ...insert example call to function...

Допустим, с каждой ссылкой связан идентификатор.

 ...insert sample reference...
 ...say something about how you determine the identifier...
 ...say something about how you want to use the identifier...

Я не могу выполнить итерацию по массиву и выполнить для каждой ссылки, поскольку часть команды меняется для каждой ссылки, так как она имеет часть идентификатора и отсутствует исчерпывающий список идентификаторов.Например, если $r0 имеет идентификатор 'r0', должна быть выполнена команда $r0->test("r0").

Ответы [ 2 ]

5 голосов
/ 25 сентября 2010

Если это внешняя команда, вы можете использовать один из system, backticks или Perl-модуль для такого рода вещей.

Если вы хотите скомпилировать и выполнить код Perl во время выполнения, вы можете использовать eval. Во многих случаях люди злоупотребляют eval, потому что не видят более простого способа добиться цели.

Если вы хотите решить, какую подпрограмму запускать в зависимости от ситуации, вы можете делать разные вещи, включая использование мягких ссылок (ick !, но иногда полезно), таблиц отправки и т.

Если вы хотите выбрать метод, основанный на значении переменной, это тоже просто:

 $object->$method(...)

Однако вы должны сообщить нам, чего пытаетесь достичь.


Я все еще не уверен, что вы спрашиваете, но на самом деле это не похоже на что-то динамичное. Я думаю, что это ситуация, которую вы описываете. Скажите, как близко это:

 my @array = ( [ 'r0', 'foo', 'bar' ] );

 foreach my $element ( @array ) {
      my( $identifier, @other_stuff ) = @$element;
      $element->test( $identifier );
      }

Было бы действительно полезно, если бы вы могли показать некоторые примеры элементов и более полный, хотя бы псевдокод, набросок того, что у вас есть. Мы знаем только то, что вы нам сообщаете в своем вопросе, но не все, что вы знаете о своей проблеме.

1 голос
/ 25 сентября 2010

Вы можете использовать eval:

eval($command);

С руководство :

eval EXPR

В первой форме возвращаемое значение EXPR анализируется и выполняется, как если бы это была небольшая Perl-программа ...

...