1

基本的に、私はユーザー入力を取得して何をすべきかを決定したいと考えており、異なるユーザー入力に対しても同じ結果を得る必要がある場合があります。コード例:

given ($command) {
      when ('a' || 'add') {add}
      when ('s' || 'subtract') {subtract}
      when ('m' || 'multiply') {multiply}
      when ('d' || 'divide') {divide}
      default { print "try again, usage: add, subtract, multiply, divide (a, s, m, d)\n" }

ここでの問題は、 or ステートメントの先頭に 1 文字のコマンドを入力した場合にのみ機能することです。プロンプトに「追加」などと入力すると、再試行するように指示するデフォルトのメッセージが表示されます。

これらのケースを個別に作成することもできますが、単一の文字と同じ本文になるだけで、冗長になります。

4

3 に答える 3

4

given/構文は、スマートマッチ演算子を使用します。whenこれには、演算子の特別な場合の動作はありません||。表現

'a' || 'add'

に評価されるため、文字列'a'と一致します。$command'a'

値のリストのいずれかと照合する場合$commandは、配列値を使用できます。

given ($command) {
    when ([qw(a add)]) { add }
...

(いつものように、これを表現する方法はいくつかあります。)

参照:

perldoc -f given

perldoc perlsyn; 「Switchステートメント」と「スマートマッチングの詳細」を検索します。

編集 :

この問題の別のアプローチ$commandは、コマンド名の任意のプレフィックス(たとえば、、、、、...、"s")を許可する場合"su"、次のようなものです。"sub""subtract"

sub match {
    my($s, $target) = @_;
    return index($target, $s) == 0;
}

...

if (match($command, 'add') { ... }
elsif (match ($command, 'subtract') { ... }
...
于 2012-07-22T08:11:54.540 に答える
2

間違ったシンタックスを使用しているだけです。次の方法で試してください。

#!/usr/bin/perl

use 5.012;
use warnings;

print 'Enter your command : ';
chomp( my $command = <> );

given ($command) {
      say 'Adding something' when ['a', 'add'];
      say 'Subtracting something' when ['s', 'subtract'];
      say 'Multiplying something' when ['m', 'multiply'];
      say 'Dividing something' when ['d', 'divide'];
      default { say "try again, usage: add, subtract, multiply, divide (a, s, m, d)\n" }
}
于 2012-07-22T08:12:51.513 に答える
0

「いつ」正規表現を評価します。

|| は使用できません。ただし、正規表現を使用できます:)

given ($command) {
    when (/(^a$|^add$)/) {
        ....
    }
    ....
}
于 2014-09-29T14:18:34.217 に答える