Можно взглянуть здесь о типах примитивов в Java.
главный интерес между этими типами использование памяти. Например, интервал использование 32 бита, в то время как байт только использование 8 битов.
Предполагают, что Вы работаете над большой структурой (массивы, матрицы...), тогда Вы будете лучше заботиться о типе, который Вы используете для сокращения использования памяти.
From perldata perldoc:
In fact, an identifier within such curlies is forced to be a string, as is any simple identifier within a hash subscript. Neither need quoting. Our earlier example,
$days{'Feb'}
can be written as$days{Feb}
and the quotes will be assumed automatically. But anything more complicated in the subscript will be interpreted as an expression. This means for example that$version{2.0}++
is equivalent to$version{2}++
, not to$version{'2.0'}++
So yes fundamentally identical. However beware of gotchas:
sub is_sub { 'Yep!' }
my %hash;
$hash{ is_sub } = 'Nope';
$hash{ is_sub() } = 'it is_sub!!';
say Dumper \%hash;
Will show:
$VAR1 = { 'is_sub' => 'Nope', 'Yep!' => 'it is_sub!!' };
My preference is for the bareword... but remember those () or a preceding + (see jrockway's comment and answer) if you're calling a sub ;-)
Функционально они идентичны, то есть до тех пор, пока в вашем ключе не будет пробела или другого не буквенно-цифрового символа. Затем вы должны использовать подход, заключенный в кавычки.
Я предпочитаю не цитировать и использовать имена, содержащие alpha_num и символ подчеркивания. Это позволяет мне не цитировать большую часть времени.
Избегание кавычек более идиоматично.
Добавьте:
Цитирование не является решением для абсолютной читабельности. Обратите внимание на несоответствие здесь:
sub function() { 'OH HAI' }
my @list = ('foo', 'bar', function);
# ==> ('foo', 'bar', 'OH HAI')
my %hash;
$hash{'foo'} = 1;
$hash{'bar'} = 2;
$hash{function} = 3;
# ==> { foo => 1, bar => 2, function => 3 } (oops)
Когда вы никогда не цитируете строки, "странные" вещи визуально отличаются от простых строк ... и они анализируются правильно.
$hash{foo} = 1;
$hash{bar} = 2;
$hash{+function} = 3; # aha, this looks different... because it is
# ==> { foo => 1, bar => 2, 'OH HAI' => 3 }
(Подсветка синтаксиса Stack Overflow мешает этому, поэтому попробуйте игнорируйте это.)
Из педантизма я всегда цитирую свои строковые ссылки в хэше. Это гарантирует, что у меня не будет ошибок [1].
[1] Я довольно консервативен в своем программировании на Perl.
Форма без кавычек предпочитается большинством, потому что она более лаконична и лаконична, пока хеш-ключ ограничен буквенно-цифровыми символами и подчеркиванием. Кроме того, почти любой редактор с поддержкой синтаксиса Perl знает, как выделить их как строки, несмотря на то, что они не заключены в кавычки.
Следует отметить, что вы можете получить такое поведение не только при использовании хеш-ключей, но и при определении хешей, передаче аргументов или даже при определении списков, когда вы используете =>
. Это может помочь визуально отличить ваши ключи от ваших значений в первых двух случаях. Примеры:
# Hash construction
my %hash = (
key1 => "val1",
key2 => "val2"
);
# Subroutine arguments
some_function( arg1 => "val1", arg2 => $val2);
sub some_function { my %args = @_; }; # arguments are pulled in as a hash
# List construction (of course, not sure why you'd do this...)
my @list = (Foo => "bar");
print @list; # prints Foobar
С учетом всего сказанного, я начал все цитировать, и от этой привычки было трудно избавиться. Как-то кажется «безопаснее» цитировать хеш-ключи даже после стольких лет.
The latter format, $hash{string}
, is more concise, but it only works for alphanumerics and underscores.
Вы всегда должны $ hash {"строка"}
, если только вы хотите $ hash {string}
.