tipos sintaxis paso parametros matrices funcion escalares declaracion datos concatenar perl hash scalar

sintaxis - ¿Cuál es la razón para evaluar un hash en Perl en un contexto escalar?



sintaxis de perl (2)

El escalar (% hash) le permite verificar si el algoritmo hash está funcionando correctamente. Si tiene 1,000 teclas y ve algo así como 2/16 eso significa que todas las teclas se están resolviendo en solo 2 de los 16 espacios asignados. Esto significa que todas sus claves son muy similares y causan muchas colisiones, lo que da como resultado largas búsquedas secuenciales en el depósito.

El recuento de cubos predeterminado es 8

perl -le ''$h{a}=1;print scalar %h'' 1/8

Prestash el hash con 1000 cubos (con la potencia más cercana a 2)

perl -le ''keys(%h) = 1000;$h{a}=1;print scalar %h'' 1/1024

Esto también ayuda cuando bendices un hash para Perl OO. Puedes acelerar las cosas si sabes que habrá muchas llaves.

Me doy cuenta de que la evaluación de una matriz en Perl en un contexto escalar es útil: da como resultado un # de elementos.

Pero, ¿cuál es el uso práctico de poder evaluar un hash en un contexto escalar? p.ej

  • my $scalar_value = %hash;

  • scalar(%hash)

Por lo que yo entiendo, produce una cadena como " 3/4 ", dando cierta información sobre las partes internas del hash que parece ser útil para la depuración.


Produce un valor que se puede usar como indicador TRUE / FALSE para saber si el hash está vacío (sin teclas).

Como ejemplo:

if (%hash) { print "Hash has elements/n"; } else { print "Hash is empty/n"; }

if fuerza la expresión en un contexto escalar debido a su uso como una expresión booleana.

Es un concepto muy similar al uso de @array en un contexto escalar para probar el vacío:

if (@array) { # NOT empty! }