Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Есть ли аналогия $#array?


Автор: DH 21.12.2005, 23:10
после выполнения функции
$f = $r->do_something();
в переменную $f пишеться ссылка на массив содержащий резултаты выполнения функции do_something()

доступ к этим элеметам осуществляеться так:
$f->[0] - первый элемет, и т.д.

так вот, как мне узнать, длиину этого массива, тоесть:
$f->[n] , где n - последний элемент массива.

Сорри, возможно некоторые термина не так употребил, просто в России уже не живу достаточно долго.

Автор: korob2001 21.12.2005, 23:54
Попробуй так:
Код

$f = $r->do_something();
print scalar @$f;

Прошу заметить, что scalar возвратит число елементов массива, а не индекс последнего елемента. Для того, что бы получить индекс последнего елемента нужно от числа елементов отнять единицу.
Код

$f = $r->do_something();
print $f->[scalar(@$f)-1], "\n"; # Выводим последний елемент

Можно так же и не указывать scalar, если ты хорошо отличаешь скалярный и списковой контексты, т.е. выше указанный код можно написать и так:
Код

$f = $r->do_something();
print $f->[@$f-1], "\n"; # Выводим последний елемент (скалярный контекст)

Это всё хорошо, но для того, что бы обращаться к елементам массива с конца, гораздо разумнее делать вот так:
Код

$f = $r->do_something();
print $f->[-1], "\n";  # Выводим последний елемент
print $f->[-2], "\n";  # А теперь предпоследний

Автор: Kannabismus 22.12.2005, 00:52
...и, разумеется, можно пользоваться не аналогией, а прямо $f->[$#$f]
$#$f и будет индекс последнего элемента массива @$f

Автор: DH 22.12.2005, 01:26
Всем большое спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)