1

これは小さな問題であり、あなたが私を助けてくれることを願っています. 私のコードはおそらくゴミです。たとえば、唯一のステートメントがJohn is the uncle of Sam. 私の Perl スクリプトは、ファイルの内容を配列にコピーする必要があります。ユーザーは、別の名前を入力して、それらの名前がファイルに記載されているかどうかを検索できる必要があります。プログラムには、「叔父叔母、母、父など」のような関係を持つ配列があるはずです。

#use warnings;
use Array::Utils qw(:all);

print "Please enter the name of the file\n";
my $c = <STDIN>;

open(NEW,$c) or die "The file cannot be opened";

@d = <NEW>;
print @d, "\n";

@g = qw(aunt uncle father);

chomp @d;
chomp @g;
my $e;
my $f;


print "Please enter the name of the first person\n";
my $a = <STDIN>;
print "Please enter the name of the second person\n";
my $b = <STDIN>;

my @isect = intersect(@g, @d);

print @isect;


foreach(@d)
    {
        if ($a == $_)
            {
                $e = $a;
            }
        else
            {
                print "The first person is not mentioned in the article";
                exit();
            }
        if ($b == $_)
            {
                $f = $b;
            }
        else
            {
                print "The second person is not mentioned in the article";
                exit();
            }
    }


print $e;
print $f;
close(NEW);

これは私がこれまでに行ったことであり、交差点は両方の配列で共通の単語である叔父という単語を与えていません。プログラムは任意のランダムな名前を取得して出力します。John と Sam 以外の別の名前を入力しても、その名前がファイルに存在しないと言っているわけではありません

4

2 に答える 2

1

いくつかの問題があります:

  1. chompあなたは$cしません。ファイル名の最後に改行が含まれています。

  2. の 2 引数形式を使用しますが、open2 番目の引数はテストしません。>これはセキュリティ上の問題です。ユーザー入力にまたはが含まれているとどうなるか知っていますか|?

  3. ==文字列を比較するために使用します。文字列の等価性は でテストされeqますが、==数値はテストされます。

  4. さらに、「Sam」が「John is the uncle of Sam」に等しいかどうかも知りたくありません。それがその一部であるかどうかを知りたいのです。indexまたは正規表現を使用して確認する必要がある場合があります。

  5. $a変数の名前として使用しないでください。これは特別なものです ( perlvarを参照)。

于 2013-08-05T11:57:23.300 に答える