Как мне передать переменную из одной функции в другую в perl

#perl #function #scope

#perl #функция #область видимости

Вопрос:

Я инициализирую переменную внутри одной функции и хотел бы передать эту переменную в другую функцию. Эта переменная содержит значение char. Я пробовал передавать ссылки и разыменования, объявлять переменные вне функции и использовать local .

Я также посмотрел в perlmonks, perl by example, погуглил и просмотрел этот сайт в поисках решения, но безрезультатно. Я только начинаю с программирования на perl, поэтому любая помощь будет оценена по достоинству!

Комментарии:

1. Некоторый код и what doesn't work описание были бы полезны.

Ответ №1:

Мне кажется, вам нужно прочитать некоторую документацию, а не просто поискать в Google. Я бы посоветовал http://www.perl.org/books/beginning-perl/ .

 use strict;
use warnings;

sub foo {
    my $char = 'A';

    bar($char);
}

sub bar {
    my ($bar_char) = @_;

    print "bar got char $bar_charn";
}

foo();
 

Комментарии:

1. Он говорит об инициализации var внутри функции, а затем переходе к другой функции. $a=0; инициализация ($a); использование ($a). Вот как я понимаю qs.

2. @OlegGryb трудно сказать без какого-либо кода, показывающего, что было опробовано.

3. Вы правы, информации недостаточно, но я так понял.

Ответ №2:

Если вы передаете параметр по ссылке (см. Ниже), Он может быть изменен первой функцией, а затем вы можете передать его другой функции:

     #!/usr/bin/perl

sub f {
  $c = shift;
  $c='m';
}

$c='a';
f($c);
print $c;
 

Это выведет ‘m’

Ответ №3:

Есть ли причина, по которой ваша первая функция не может вернуть эту переменную?

 my $config_variable = function1( $param1 );
function2 ( $config_variable, $param2 );
 

Вы также можете передать несколько переменных обратно:

 my ( $config_variable, $value ) = function1( $param1 );
my $value2  = function2( $param1, $config_variable );
 

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

 #! /usr/bin/env perl
#
use strict;
use warnings;

my $value;

func1();
func2();

sub func1 {
    $value = "foo";
}

sub func2 {
    print "Value = $valuen";
}
 

Обратите внимание, что я объявил $value вне обеих функций, поэтому она является глобальной во всем файле — даже в подпрограммах. Теперь func1 вы можете установить его и func1 распечатать.

Технический термин для этого: ужасная, ужасная, злая идея, и вы никогда, никогда не должны думать об этом.

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

Если вы обнаружите, что занимаетесь этим довольно часто, вам, возможно, придется переосмыслить логику вашего кода.