Perl имеет подобные PHP динамические переменные?

Для вызова удаленного сервиса из процесса исполнения Bonita вам необходимо использовать коннекторы. Bonita предлагает широкий ассортимент разъемов. Вам нужно найти тот, который соответствует вашему удаленному сервису. Обратите внимание, что соединитель, такой как REST или веб-служба, позволяет вам подключаться к множеству различных систем, если они предоставляют API, доступные через REST или веб-службы.

Вы можете настроить входы разъемов, используя бизнес-переменные процесса.

11
задан Peter Mortensen 9 April 2016 в 19:22
поделиться

5 ответов

То, что Вы пытаетесь сделать, называют "символьной ссылкой". В то время как можно сделать это в Perl, Вы не были должны. Символьные ссылки только работают с глобальными переменными - не лексический (my). Нет никакого способа ограничить их объем. Символьные ссылки опасны. По этой причине они не работают под strict прагма.

В целом, каждый раз, когда Вы думаете, что Вам нужны символьные ссылки, необходимо использовать хеш вместо этого:

my %hash;
$hash{phone} = '555-1234';
print $hash{phone};

Существует несколько случаев, где symrefs полезны и даже необходимы. Например, механизм Perl экспорта использует их. Это усовершенствованные темы. К тому времени, когда Вы готовы к ним, Вы не должны будете спрашивать как.;-)

57
ответ дан 3 December 2019 в 00:38
поделиться

Напыщенная речь Read Mark-Jason Dominus против выполнения в этом, Почему глупо 'использовать переменную в качестве имени переменной'.

Вы ограничили бы объем своих изменений в $phone путем запуска блока с

local $phone;

или даже

local $$vname;

(Хотя любой $phone изменений для любых нижних индексов, названных от Вашего блока также, таким образом, это не то же как лексический контекст a my() объявление.)

13
ответ дан 3 December 2019 в 00:38
поделиться

Можно сделать это очень похожим способом:

$vname = "phone";
$$vname = "555-1234";
print $phone;

Но это, Вы можете, не означает, что Вы должны. Лучший способ управлять этим, как Michael Carman говорит, ИСПОЛЬЗУЙТЕ ХЕШ!

8
ответ дан 3 December 2019 в 00:38
поделиться

Вы не можете сделать этого со строгой прагмой, включенной, и строгая прагма должна обычно всегда включаться. Можно сделать это с прагмой прочь, хотя, смотрите на этот лайнер:

perl -le 'my $vname = "phone"; ${ $vname } = "555-1234"; print $phone'

Это будет работать, но это не будет:

perl -Mstrict -le 'my $vname = "phone"; ${ $vname } = "555-1234"; print $phone'

"-Mstrict" говорит этому "использовать строгий".

Почти всегда лучше использовать хеш для чего-то вроде этого, которое является о том же как ассоциативный массив в PHP.

6
ответ дан 3 December 2019 в 00:38
поделиться

Вы ведь понимаете, что PHP наследует многие из своих возможностей от Perl, верно?

Не только Perl может делать все то же самое, что и PHP,

use strict;
use warnings;
use 5.010;

our $test=1;

# Access $test through the special hash %::
say ${$::{test}}++;

# This is essentially what the previous line did.
say ${\$test}++

# Same as $test
say ${test}++;

{
  # PHP's simple symbolic ref
  my $ref = "test";
  no strict 'refs';
  say $$ref++;
  say ${"test"}++;
}
{
  package d;
  say ${$main::{test}}++;

  my $ref = $main::{"test"};
  say $$ref++;

  $ref = \$main::test;
  say $$ref++;
}
0
ответ дан 3 December 2019 в 00:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: