strawberry logo lane historia example compilador perl

logo - perl vs python



¿Por qué Perl se queja de que "el uso de división implícita en @_ está en desuso"? (3)

De los documentos divididos :

En contexto escalar, devuelve la cantidad de campos encontrados. En contexto escalar y vacío, se divide en @_ array. Sin embargo, el uso de la división en el contexto escalar y vacío está en desuso, ya que corta los argumentos de subrutina.

Entonces, como lo está usando en contexto escalar, se divide en la matriz @_ , que es un uso obsoleto. (Tiene que hacer la división, ya que rompería el viejo código esperando que se divida en @_ - de ninguna manera alrededor de la advertencia sin asignarlo a una matriz temporal, hasta donde yo sé. Eugene Y tiene esto explícitamente en su respuesta .)

Este código desencadena la queja a continuación:

#!/usr/bin/perl use strict; use warnings; my $s = "aaa bbb"; my $num_of_item = split(//s+/, $s) ; print $num_of_item;

Cuando ejecuto el código, Perl se queja de que "El Use of implicit split to @_ is deprecated ". Realmente no tengo un "contexto" para el problema, por lo que espero que ayudes a explicar qué pasa con el código.


Está utilizando split en contexto escalar, y en contexto escalar se divide en la matriz @_ . Perl te advierte que es posible que acabes de matar a @_. (Consulte la división perldoc para más información).

Para obtener el número de campos, use este código:

my @items = split(//s+/, $s); my $num_of_item = @items;

o

my $num_of_item = () = split //s+/, $s, -1;

Nota: La forma de tres argumentos de split () es necesaria porque sin especificar un límite, la división solo se dividiría en una sola pieza (una más de la necesaria en la asignación).


Permita que el diagnostics brinde más información:

use strict; use warnings; use diagnostics; # comment this out when you are done debugging my $s = "aaa bbb"; my $num_of_item = split(//s+/, $s) ; print $num_of_item;

El uso de división implícita a @_ está en desuso

(D obsoleta, sintaxis W) Al compilar una lista de argumentos de la subrutina, hace mucho trabajo para el compilador, por lo que es mejor si asigna los resultados de una división () explícitamente a una matriz (o lista).

Una mejor forma de obtener información de diagnóstico es desde la línea de comando:

perl -Mdiagnostics my_program.pl