Perl:我的字符串中没有考虑我的变量

时间:2018-01-09 14:20:57

标签: perl

在gedit中,粉色是字符串的颜色,绿色是变量。

正如您在此图片中看到的,当我尝试在echo中添加密码时,我的变量$log为粉红色,因此Perl认为它是一个字符串。

我该怎么改变?我需要Perl将$log视为变量


code

我没有错误,但代码不会将密码添加到我的帐户

以下是代码为文本

open( LIST, "<liste-utilisateur.txt" ) or die "ERREUR FICHIER";

while ( <LIST> ) {

    if ( $_ =~ /^([A-Za-zéè\s-]*);([A-Za-zéè\s-]*);([A-Za-z\s-]*);([A-Za-z\s-]*);([A-Za-z\s-]*)$/ ) {

        #$1=>Nom
        #$2=>Prenom
        #$3=>Login
        #$4=>groupe

        print $1;
        print $2;
        my $log = "loc" . uc $3;
        print "$log";

        #my $newgroup = `$groupadd -f $4`;
        #my $newuser = `$useradd $log -g users -G $4 -c '$2.$1'`;

        my $password = `echo -e "'$5'\n'$5'" | passwd --stdin $log`;

        close( LIST );

1 个答案:

答案 0 :(得分:7)

问题在于你所写的东西,而不是它的颜色!如果您使用不同的编辑器查看相同的源文件,那么您很可能会看到不同的颜色,或者所有颜色都可能是相同的颜色

编辑器为代码着色的方式只是为了您的方便。 Perl编译器将只查看和处理文本

语法着色通常可以提醒您错误,例如未终止的字符串或可以吞下程序其余部分的注释,或者可能是错过的右括号。但由于Perl很难解析,Perl语法着色往往不是很好。如你所见, gedit 误解了这一行

my $password = `echo -e "'$l5'\n'$5'" | passwd --stdin $log`;

着色`echo -e "''" | passwd --stdin $log` 粉红色,因为它

天真地认为,开头反引号`已被以下单引号'

关闭

将字符串传递给shell执行时,很难获得正确的引用。安装起来要容易得多 String::ShellQuote 模块,让它照顾任何角落案件