Uno de mis colegas escribió un script en Perl que pregunta por el nombre de usuario / dominio de Windows del usuario, que por supuesto ingresamos en el siguiente formato domainnameusername
. El getopt:El módulo largo luego lo convierte en una cadena que elimina el carácter "" y hace que la cadena sea incorrecta. Por supuesto, podríamos pedir a todos nuestros usuarios que ingresen su combinación de dominio / usuario como domainname\username
pero realmente no quiero ser culpable "arregle el usuario, no el programa". También usamos un módulo que hicimos para esto, lo llamaré OurCompany::ColdFusionAPI
ya que accede a ColdFusion.
Nuestro código se ve así:
#!/usr/bin/perl
use common::sense;
use Getopt::Long;
use OurCompany::ColdFusionAPI;
my ($server_ip, $username, $password, $need_help);
GetOptions (
"ip|server-address=s" => $server_ip,
"user-name=s" => $username,
"password=s" => $password,
"h|help" => $need_help,
);
$username ||= shift;
$password ||= shift;
$server_ip ||= shift;
if (!$server_ip or $need_help){
print_help();
exit 0;
}
my $print_hash = sub { my $a = shift; say "$_t=> $a->{$_}" foreach keys %$a; };
...
Si agrego la linea say $username
entonces solo da la cadena sin el "". ¿Cómo puedo obtener perl para mantener el ""? Algo en la línea de read -r
en fiesta
Respuestas
11 para la respuesta № 1Tu caparazón hace eso, no Getopt :: Long. Necesitas escapar del para que su shell lo interprete como una barra diagonal inversa en lugar de un intento de escapar de algo.
9 para la respuesta № 2
¿Estás seguro de que esto se debe a Getopt :: Long? Lo más probable es que su shell ya esté analizando lo que está escribiendo y jugando con las barras invertidas.
¿Por qué no preguntar Dominio y Nombre de usuario por separado? Eso resolvería el problema de manera elegante.