#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
распечатать.
Технический термин для этого: ужасная, ужасная, злая идея, и вы никогда, никогда не должны думать об этом.
Это происходит потому, что конкретная переменная, которой, по вашему мнению, присвоено одно значение, внезапно и таинственным образом меняет значения без какой-либо причины. Делать это для одной переменной достаточно плохо, но если вы используете это как опору, вы получите десятки переменных, которые невозможно отследить в вашей программе.
Если вы обнаружите, что занимаетесь этим довольно часто, вам, возможно, придется переосмыслить логику вашего кода.