/ / Making Perl Getopt :: Long mantenga la barra invertida () en una cadena - perl, escape, barra invertida, getopt-long

Haciendo que Perl Getopt :: Mantenga la barra invertida () en una cadena: Perl, escaping, backslash, getopt-long

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 № 1

Tu 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.