-2

我需要 PERL 脚本的帮助,我正在尝试在 irc 机器人上执行以下操作:

  • 在用户命令上查看文件是否存在。
  • 如果不存在,则创建新文件,然后打印值“1”。
  • 如果存在则进入下一阶段。
  • 获取文件里面的文件信息,是一个数字。
  • information + 1 然后打印到一个新文件中,同名。

这是脚本:

        my ($who,$channel,$message) = @_;
my @things = split(' ', $message);
            my @args = @things[1..$#things];

        if ($message =~ /^&cookie/i && @args[0..$#args]) {

    if ( -s '@args[0..$#args].txt') { $varr = 1; goto varrr;
    } else {
    open (USER, ">", "@args[0..$#args].txt") or die "failed: $!";
    my $sum = 1;
    print USER "$sum";
    close (USER);
    }
       varrr:
       if ($varr == 1) {
    open (USER, "<@args[0..$#args].txt");
    while (my $use = <USER>) {
    my $sum = 1;
    my $newuse = ($use + $sum);

    close (USER);

    open (USER, ">@args[0..$#args].txt");
    my $usee = $use + 1;
    print USER "$newuse\n";
    close (USER);
    print $sock "PRIVMSG $channel :You have given @args[0..$#args] a cookie! \n";
    $varr = 0;
    }
    }
    }
    elsif ($message =~ /^&cookie/i) {
    print $sock "PRIVMSG $channel :Invalid parameter, use &cookie [name]. \n";
    }

编辑:

已修复,goto 必须保留,谢谢大家 :)

[编辑]

D:我必须有一个名为我测试它的文件,如果该文件不存在,它现在将不再创建该文件,现在怎么办?我只有 3 天的 perl 经验。

也试过:

        if ($message =~ /^&cookie/i && @args[0..$#args]) {

unless ( -s '@args[0..$#args].txt') { $varr = 1;
} else {
open (USER, ">", "@args[0..$#args].txt") or die "failed: $!";
my $sum = 1;
print USER "$sum";
close (USER);
}
   varrr:
   if ($varr == 1) {
open (USER, "<@args[0..$#args].txt");
while (my $use = <USER>) {
my $sum = 1;
my $newuse = ($use + $sum);

close (USER);

open (USER, ">@args[0..$#args].txt");
my $usee = $use + 1;
print USER "$newuse\n";
close (USER);
print $sock "PRIVMSG $channel :You have given @args[0..$#args] a cookie! \n";
$varr = 0;
}
}
}
4

1 回答 1

1

您正在尝试在第一个条件中使用字符串插值'@args[0..$#args].txt'。perl 仅在双引号中或使用qw//. 这意味着您正在检查是否存在名为@args[0..$#args].txt而不是 args 的值的文件。@args[0..$#args]是一个数组切片,当字符串内场时将用空格连接。这可能会导致某些文件系统出现问题。

此外,使用 -e 而不是 -s 来检查文件是否存在可能会更好,因为在某些文件系统上可能有一个 0 长度的文件。$varr 变量是不必要的,因为您可以将代码从第二个条件移动到第一个而不改变函数。

于 2013-01-11T22:16:07.960 回答