次のように実行したいと思います
$ perl test.pl tex
結果: 1. テキサス州 2. ヒューストン、テキサス州 3. DFW テキサス オプション?2 Telneting to: Houston Texas
私は基本的に配列を検索し、それに数値を割り当てて、毎回完全な値ではなくそれを呼び出したいと思っています。
これは、見かけよりも単純な問題です。
use strict;
use warnings;
@ARGV == 1 or die "Usage: perl test.pl <location>\n";
my $place = quotemeta shift;
open my $fh, '<', 'telnets.txt' or die $!;
my @telnets = grep /$place/i, <$fh>;
die "No matching telnets\n" unless @telnets;
chomp @telnets;
print "RESULTS:\n";
printf "%d . %s\n", $_ + 1, $telnets[$_] for 0 .. $#telnets;
print "\n";
print "Option? ";
my $option = <STDIN>;
$option =~ s/\s+//g;
die "Invalid selection $option\n" unless $option > 0 and $telnets[$option-1];
print "Telneting to: $telnets[$option-1]\n";
ファイルplaces.txtに含める
Texas
Houston Texas
DFW Texas
次に、次の Perl スクリプトが目的の処理を実行します。スクリプト内のコメントで説明します。
#!/usr/bin/perl
use warnings;
use strict;
use integer;
our $filename_place = 'places.txt';
our $index_field_width = 2;
# Read in the place data.
my @place;
open PLACE, '<', $filename_place;
while (<PLACE>) {
chomp;
push @place, $_;
}
close PLACE;
# Print a menu.
for (my $i = 0; $i < @place; ++$i) {
printf "%${index_field_width}d. %s\n", $i+1, $place[$i];
}
# Let the user choose.
print "\nOption? ";
my $option = <>;
chomp $option;
$option >= 1 && $option <= @place
or die "$0: the option chosen is out of range\n";
# Act on the user's choice. (Of course, you can put
# here whatever action you like but, as written, the
# following produces your sample output.)
print "Telneting to: ${place[$option-1]}\n\n";