LINUX.ORG.RU

perl. передача нескольких массивов в функцию

 


0

1

Всем привет!

В общем, пробовал вот так (не вышло):

sub load($**)
{
    my ($filename, $x1_ref, $x2_ref) = @_;
    my ($num_str, @x1, @x2);
    open my $file, '<', $filename or die "Невозможно открыть файл: $!\n";
    #do_smth
    close $file;
    $x1_ref = \ @x1;
    $x2_ref = \ @x2;
}

sub use_it
{
    my (@x1, @x2) = @_;
    #do smth
    print @x1;
    print @x2;
}

my (@num_str_array_w,@all_str_w);
load($ARGV[1],@x,@y);
use_it(@x,@y);

Хочется, чтобы load, читая из файла, правильно заполняла массивы, которые потом передавались бы в use_it. В перле я пока не до конца понимаю (от слова совсем), как работают ссылки.

Проблема в том, что из load ничего не возвращается. Зная С++, я понимаю почему (после выхода из функции массив умирает, ссылка остается), но не понимаю, как правильно написать код в перле....

★★

Последнее исправление: aido (всего исправлений: 1)

sub load
{
    my ($filename, $x1, $x2) = @_;
    my ($num_str);
    open my $file, '<', $filename or die "Невозможно открыть файл: $!\n";
    #do_smth
    push @$x1, $num_str;
    push @$x2, $num_str + 1;

    close $file;
}

sub use_it
{
    my ($x1, $x2) = @_;
    #do smth
    print @$x1;
    print @$x2;
}

my (@x1, @x2, @num_str_array_w, @all_str_w);
load($ARGV[1],\@x,\@y); # Передавай ссылку на массив в функцию
use_it(\@x,\@y);        # тоже самое
animechaos ★★
()
Ответ на: комментарий от animechaos

спасибо. теперь я понял, как работать с ссылками и функциями.

aido ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.