Форум программистов, компьютерный форум, киберфорум
Perl
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
2184 / 1254 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
1

Cлайс списка

01.03.2018, 15:25. Показов 1270. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Знакомлюсь с перлом, такой вопрос

Perl
1
2
3
4
5
6
7
8
test2(1, 2, 3, 4, 5);
 
sub test {
    my ($param, @param2) = @_[0, 3..5];
    
    $" = '-';
    print  "$param @param2";
}
результат будет 1 4-5-
а если я хочу так:
Perl
1
2
3
4
5
6
sub test {
    my (@part1, @part2) = @_[0..2, 3..5];
    
    $" = '-';
    print  "@part1 @part2";
}
почему у меня все в @part1, а в @part2 пусто, а хотелось бы разбить массив на 2 части
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2018, 15:25
Ответы с готовыми решениями:

Создание списка, печать списка на экран, добавления элемента в начало списка, конец списка
Построить динамическую структуру типа список . Необходимо реализовать следующие процедуры: 1....

Написать код программы, выполняющей растяжку списка и вставку, удаление из списка и сжатие списка
Люди ПОМОГИТЕ осталось совсем мало , мне нужна помощь!!! написать код программ: 1) Написать код...

Даны два списка. Каждый элемент первого списка ассоциативно связан соответствующим элементом второго списка
Помогите пожалуйста Даны два списка: список студентов и список их успеваемости. Каждый элемент...

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

3
Невнимательный
2597 / 974 / 321
Регистрация: 08.02.2013
Сообщений: 5,721
Записей в блоге: 2
01.03.2018, 19:03 2
странно, вроде @part1 не должен быть пустым (...проверял только на pl-v5.10)
, поскольку my (@part1, @part2) = ....
...perldata
You can actually put an array or hash anywhere in the list, but the first one in the list will soak up all the values, and anything after it will become undefined. This may be useful in a my() or local().
, а так можно сделать просто
my @param = @_[0..2];
my @param2= @_[3..5];
0
5986 / 1995 / 323
Регистрация: 10.12.2013
Сообщений: 6,875
01.03.2018, 19:50 3
Лучший ответ Сообщение было отмечено anonimus как решение

Решение

Цитата Сообщение от anonimus Посмотреть сообщение
почему у меня все в @part1, а в @part2 пусто
Потому что весь список из правой части высосет первая же переменная спискового типа из левой части;
perl так работает, во-первых, признака разбиения правого списка на 2 части с помощью запятой он не разглядит,
а даже если и разглядит, то всё равно политикой спискового присвоения является высасывание до последней капли.

единственный выход - иметь слева два скаляра, а справа две ссылки на массивы

test.pl

Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
sub test($$) {
 
    ($a,$b) = @_;
 
 
    use Data::Dumper;
 
    print Dumper $a, $b;
 
 
}
 
test( [@ARGV[0..2]], [@ARGV[3..$#ARGV]] );
Bash
1
perl test.pl 0 1 2 3 4 5 6 7 8 9 A B C D E F G H
Вывод:
Код
$VAR1 = [
          '0',
          '1',
          '2'
        ];
$VAR2 = [
          '3',
          '4',
          '5',
          '6',
          '7',
          '8',
          '9',
          'A',
          'B',
          'C',
          'D',
          'E',
          'F',
          'G',
          'H'
        ];
1
Невнимательный
2597 / 974 / 321
Регистрация: 08.02.2013
Сообщений: 5,721
Записей в блоге: 2
01.03.2018, 23:48 4
кстати да, [...]-анонимный массив тоже удобно, в случае если 1,2,3,.. простые переменные
Perl
1
2
3
4
5
6
7
sub test {
    my ($param,@param2)= @_;
 
    $" = '-';
    print  "@$param @param2\n";
}
test [1,2,3],4,5,6;
только имхо, в памяти они всётаки перезаписываются, как в случае например с
Perl
1
2
3
4
5
6
test [1,2,3],(4=>5,8=>9),(6=>7);
test [1,2,3],(4=>5,8=>9,6=>7)[0..5];
 
my %hash=(4=>5,8=>9,6=>7);
print"\n";
test [1,2,3],%hash;
последний вариант показывает перевёрнутый хэш, на версии перл ранее последней вроде. ... хотя возможно ошибаюсь
1
01.03.2018, 23:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.03.2018, 23:48
Помогаю со студенческими работами здесь

Обработка списка: после каждого нуля добавить предшествующую часть списка
Дан список чисел, нужно после каждого нуля добавить предшествующую часть списка. Написал что-то, но...

Разделить на Х все элементы списка, которые находятся четных позициях списка
Всем привет. Возникла у меня следущая задача. Есть вот такая программа на С. Необходимо...

Разделение списка на подсписки: в первый n элементов с начала списка, во второй оставшиеся
Определите функцию, осуществляющую разделение исходного списка на два подсписка. В первый из них...

Реализовать ведение списка забронированных и списка купленных билетов в кинозале кинотеатра
Приветствую! работаю на Builder Borland c++ - программирую таблицы и кнопки такое задание :...


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

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