Я вижу, что для стрелки вы используете юникод символ длинную стрелку вправо . Само по себе оно не центрируется вертикально в текстовой строке. Конечно, вы можете попытаться обойти / обмануть это, регулируя отступы и т. Д., Но это не является устойчивым решением (так как дополнения могут нуждаться в настройке в соответствии с высотой элемента и размером шрифта). Вместо этого, почему бы не использовать реальный значок, например, long-arrow-right из font awesome :
Пример вашей формы с заменой только стрелки можно найти в этом коде [ 114]
Части не недопустимы:
@slice = @myarray[1, 2, 5];
@slice = @myhash{qw/foo bar baz/};
И я подозреваю, что это - часть причины, почему необходимо указать, хотите ли Вы вытащить единственное значение из хеша/массива или нет.
Я только что использовал
my $x = myarray[1];
в программе и, к моему удивлению, вот то, что произошло, когда я выполнил ее:
$ perl foo.pl
Flying Butt Monkeys!
Поэтому целая программа похожа на это:
$ cat foo.pl
#!/usr/bin/env perl
use strict;
use warnings;
sub myarray {
print "Flying Butt Monkeys!\n";
}
my $x = myarray[1];
Таким образом, myarray называет подпрограмму, передающую его ссылка на анонимный массив, содержащий единственный элемент, 1.
Это - другая причина, Вам нужен символ на доступе к массиву.
Это - допустимый Perl: @var[0]
. Это - часть массива длины один. @var[0,1]
была бы часть массива длины два.
@var['key']
не допустимый Perl, потому что массивы могут только быть индексированы числами и другими двумя (%var[0] and %var['key']
) не допустимый Perl, потому что части хеша используют {} для индексации хеша.
@var{'key'}
и @var{0}
оба допустимые части хеша, все же. Очевидно, не нормально взять части длины один, но это, конечно, допустимо.
Посмотрите раздел части perldata perldocfor больше информации о разрезании в Perl.
Символ дает Вам тип возврата контейнера. Таким образом, если что-то запускается с @
, Вы знаете, что это возвращает список. Если это запускается с $
, это возвращает скаляр.
Теперь, если существует только идентификатор после символа (как $foo
или @foo
, затем это - доступ простой переменной. Если это сопровождается a [
, это - доступ на массиве, если это сопровождается a {
, это - доступ на хеше.
# variables
$foo
@foo
# accesses
$stuff{blubb} # accesses %stuff, returns a scalar
@stuff{@list} # accesses %stuff, returns an array
$stuff[blubb] # accesses @stuff, returns a scalar
# (and calls the blubb() function)
@stuff[blubb] # accesses @stuff, returns an array
Некоторые естественные языки имеют очень похожие понятия.
Однако многие программисты нашли это сбивающим с толку, таким образом, Perl 6 использует инвариантный символ.
В целом компилятор Perl 5 хочет знать во время компиляции, если что-то находится в списке или в скалярном контексте, таким образом, без ведущего символа некоторые условия стали бы неоднозначными.
Люди уже указали, что у Вас могут быть части и контексты, но символы там для разделения вещей, которые являются переменными от всего остального. Вы не должны знать, что все ключевые слова или имена подпрограммы выбирают разумное имя переменной. Это - одна из больших вещей, которые я пропускаю о Perl на других языках.
Я могу думать об одном пути который
$x = myarray[1];
неоднозначно - что, если Вы хотели массив, названный m?
$x = m[1];
Как можно сказать, которые кроме regex соответствуют?
Другими словами, синтаксис там, чтобы помочь интерпретатору Perl, ну, в общем, интерпретировать!
Символ обеспечивает контекст для доступа:
$
контекст скаляра средств (скалярная переменная или единственный элемент хеша или массива)@
средства перечисляют контекст (целый массив или часть хеша или массив)%
весь хешВ Perl 5 Вам нужны символы ($ и), потому что интерпретация по умолчанию bareword идентификатора является интерпретацией вызова подпрограммы (таким образом избавляющий от необходимости использовать и в большинстве случаев).
В Perl 5 (чтобы быть измененным в Perl 6) символ указывает на контекст Вашего выражения.
$hash{key}
. $array[0]
. Однако, как указано zigdon, части законны. Они интерпретируют те выражения в контексте списка.
@hash{key}
работыНо также и большие списки работают также, как @hash{qw<key1 key2 ... key_n>}
.
Вы хотите несколько слотов из массива @array[0,3,5..7,$n..$n+5]
работы
@array[0]
список размера 1. Нет никакого "контекста хеша", таким образом, ни один %hash{@keys}
ни %hash{key}
имеет значение.
Таким образом, Вы имеете "@"
+ "array[0]"
<=> <символ = контекст> + <индексация выражения> как полное выражение.