在gedit中,粉色是字符串的颜色,绿色是变量。
正如您在此图片中看到的,当我尝试在echo中添加密码时,我的变量$log
为粉红色,因此Perl认为它是一个字符串。
我该怎么改变?我需要Perl将$log
视为变量
我没有错误,但代码不会将密码添加到我的帐户
以下是代码为文本
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 );
答案 0 :(得分:7)
问题在于你所写的东西,而不是它的颜色!如果您使用不同的编辑器查看相同的源文件,那么您很可能会看到不同的颜色,或者所有颜色都可能是相同的颜色
编辑器为代码着色的方式只是为了您的方便。 Perl编译器将只查看和处理文本
语法着色通常可以提醒您错误,例如未终止的字符串或可以吞下程序其余部分的注释,或者可能是错过的右括号。但由于Perl很难解析,Perl语法着色往往不是很好。如你所见, gedit 误解了这一行
my $password = `echo -e "'$l5'\n'$5'" | passwd --stdin $log`;
着色`echo -e "'
和'" | passwd --stdin $log`
粉红色,因为它
天真地认为,开头反引号`
已被以下单引号'
将字符串传递给shell执行时,很难获得正确的引用。安装起来要容易得多
String::ShellQuote
模块,让它照顾任何角落案件