Форум программистов, компьютерный форум, киберфорум
Perl
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/35: Рейтинг темы: голосов - 35, средняя оценка - 4.63
32 / 32 / 21
Регистрация: 22.09.2013
Сообщений: 378
1

Передать массив в функцию

19.08.2019, 22:36. Показов 6815. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, не могу понять как передать массив в функцию
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
...
@playList = create_play_list(`/bin/ls -1 /home/radio/Music/*.mp3`);
...
sub create_play_list{
    my ($music) = @_;
        my $tag;
        my $num;
 
    $num = scalar (@music);
 
    do{
        $play=int(rand($num));
                chomp $music[$play];
            $tag = get_mp3tag($music[$play]) or die "No TAG info";
    }while($play == $oldPlay || $oldArt == $tag->{ARTIST});
 
    return $music[$play];
}
Так возникает ошибка. Читал в интернете что нужно передавать ссылку на массив, но так и не понял как ее обработать в функции.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.08.2019, 22:36
Ответы с готовыми решениями:

Не могу разобраться как передать корректно передать массив из функции в функцию
//--------------------------------------------------------------------------- #pragma hdrstop ...

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

Массив чисел типа double передать в функцию, которая суммирует и возвращает сумму и массив
Написать функцию, которой передается массив чисел типа double, Функция суммирует элементы этого...

Как передать массив структур в функцию в качестве параметра, чтобы изменения в функции меняли исходный массив?
Допустим есть структура struct Base { int a; int b; int c; }; В...

6
Невнимательный
2596 / 973 / 321
Регистрация: 08.02.2013
Сообщений: 5,709
Записей в блоге: 2
19.08.2019, 23:11 2
Лучший ответ Сообщение было отмечено Sluchayno как решение

Решение

Цитата Сообщение от Sluchayno Посмотреть сообщение
@playList =
Цитата Сообщение от Sluchayno Посмотреть сообщение
return $music[$play];
наверное имелось ввиду $playList

Как ссылку на анонимный массив... или func(\@list)
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
my $oldArt  ='';
my $oldPlay ='';
 
sub create_play_list {
    my ($music) = @_;
        my $tag;
        my $num;
        my $play;
 
    $num = scalar (@$music);# как вариант $music->@* вместо @$music
 
    do{
        $play=int(rand($num));
        chomp $music->[$play];# ->
        $tag = get_mp3tag($music->[$play]) or die "No TAG info";
 
    }while($play eq $oldPlay || $oldArt eq $tag->{ARTIST});
    $oldPlay = $play;
    $oldArt = $tag->{ARTIST};
 
        return $music->[$play];# Возвращает скаляр
}
 
my $playList = create_play_list([`/bin/ls -1 /home/radio/Music/*.mp3`]);
 
print $playList;
1
50 / 35 / 9
Регистрация: 13.06.2019
Сообщений: 204
22.08.2019, 06:12 3
`вызов команды и перехват её вывода` это, наверное, медленно по сравнению с <*.mp3> см. perldoc glob
0
418 / 178 / 27
Регистрация: 11.03.2018
Сообщений: 764
22.08.2019, 14:21 4
Начинать критиковать надо не с этого, а с того, что сама функция ни о чём ))

( если посмотреть на предыдущий топик ТС, то можно приблизительно догадаться о его желаниях ).
0
Невнимательный
2596 / 973 / 321
Регистрация: 08.02.2013
Сообщений: 5,709
Записей в блоге: 2
22.08.2019, 18:55 5
Всмысле $oldArt , $oldPlay при каждом новом запуске будут пустыми ?
Так тут возможно как-раз предполагается многократно запускать функцию/подпрограмму

Добавлено через 54 секунды
Или нет ))
0
418 / 178 / 27
Регистрация: 11.03.2018
Сообщений: 764
22.08.2019, 20:25 6
Глянул в CPAN.
Положил глаз на https://metacpan.org/pod/Audio::Scan
Реализован на 'C';
Реализован поисковый сканер, структура хранения уже придумана, документация толковая,
древние тэги преобразуются в ID3v2.4, текст преобразуется в UTF8;

В общем бери и пользуйся.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
27.08.2019, 01:15 7
Цитата Сообщение от bidstrup Посмотреть сообщение
В общем бери и пользуйся.
Да и этот в принципе вполне рабочий
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/perl
 
use strict;
use warnings;
use utf8;
use MP3::Info qw/:all/;
binmode(STDOUT, ":utf8");
use_mp3_utf8(1);
 
my $dirname = "/home/andrew/Музыка/other";
my ($file, $mp3, $title, $artist, $genre, $min, $sec);
 
print "Title               Artist              Genre           Time\n", ("-" x 70), "\n";
 
format STDOUT =
@<<<<<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<@<<<<<<
$title,             $artist,            $genre,        sprintf(" %02d:%02d", $min, $sec)
.
 
opendir(my $dh, $dirname) or die "Can't open directory: $!\n";
while ( $file = readdir($dh) ) {
    next unless $file =~ /mp3$/;
    $file = "$dirname/$file";
    $mp3 = MP3::Info->new($file) or die "Can't create mp3 object: $!\n";
    $title = $mp3->{TITLE} || "unknown";
    $artist = $mp3->{ARTIST} || "unknown";
    $genre = $mp3->{GENRE} || "unknown";
    $min = $mp3->{MM};
    $sec = $mp3->{SS};
    write;
}
closedir($dh);
Код
[andrew@easybook other]$ ./mp3read.pl 
Title               Artist              Genre           Time
----------------------------------------------------------------------
Иуда                Хаски               unknown         02:15
Change The World    Eric Clapton        www.mp3-ogg.ru  06:16
Gabriel (Nelle HoopeLamb                Rock/Pop        04:02
Softly              Lamb                Electronic, Tri 03:57
[andrew@easybook other]$
0
27.08.2019, 01:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.08.2019, 01:15
Помогаю со студенческими работами здесь

Передать массив в функцию
Всем привет! В процессе появился случай воспользоваться указателями, но я их забыл, прошу помощи....

Передать массив в функцию
Здрасти. Знаю что таких тем навалом,но я что-то не понял. допустим есть массив mas я передаю...

Передать массив в функцию
Здравствуйте. Помогите пожалуйста, я сделал задание: Программа считает сумму 4-х чисел и выводит...

Передать массив в функцию
program ss; var a: array of integer; i,s:integer; begin randomize; for i:=1 to 7 do...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru