Pregunta

Me doy cuenta de que evaluar una matriz en Perl en un contexto escalar es útil: da como resultado un número 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 tengo entendido, produce una cadena como "3/4" que proporciona información sobre las partes internas del hash que parece ser solo útil para depurar.

¿Fue útil?

Solución

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

Como ejemplo:

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

if fuerza la expresión a un contexto escalar debido a su uso como 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!
}

Otros consejos

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

El recuento de depósitos predeterminado es 8

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

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

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

Esto también ayuda cuando bendices un hash por perl OO. Puede acelerar las cosas si sabe que habrá muchas claves.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top