コマンドラインツールの入出力
ここまで,
IO::Prompt::Simpleを使ったインタラクティブな入力
コマンドラインツールを実行する際,IO::Prompt::Simple
を使うと,
use IO::Prompt::Simple;
# 前処理
my $answer =
prompt 'ファイルの削除を実施します。よろしいですか? (y/N)',
'N';
if ($answer eq 'y') {
# ファイル削除
} elsif ($answer eq 'N') {
print "ファイルの削除をキャンセルしました\n";
exit;
} else {
die 'invalid input';
}
prompt
関数の第1引数にはユーザーへのメッセージ,prompt
の戻り値として返ってきます。
prompt
関数の第2引数がスカラ値の場合はデフォルト値として扱われますが,
use IO::Prompt::Simple;
my $answer =
prompt 'ファイル削除を実施します。よろしいですか?',
{ anyone => [qw/y N/], ignore_case => 1 };
詳しくは,IO::Prompt::Simple
のドキュメントを参照してください。
環境変数からの入力
本項では環境変数から入力を受け付ける方法を説明します。ここまで紹介したコマンドライン引数を使う方法,TERM
変数やLANG
変数など,crontab
で複数のコマンドの実行計画を定義している場合,
MAILTO=report@example.com
0 * * * * /path/to/cmd1.pl
30 1 * * * /path/to/cmd2.pl
上記のように記述すれば,cmd1.
でもcmd2.
でも$ENV{MAILTO}
でレポート送信先メールアドレスreport@example.
)
ほかに,Smart::Options
でも対応しています。
use Smart::Options;
$ENV{TEST_FLAG} = 'FLAG VALUE';
Smart::Options->new->env_prefix('TEST')
->env('flag')->parse();
# => { 'flag' => 'FLAG VALUE' }
env
メソッドを使うと,env_
で指定した接頭辞_大文字化したオプション名」TEST_
)
なお,Smart::Options
では,
色付きの出力
diff
コマンドなどが良い例ですが,Term::ANSIColor
を使えばエスケープシーケンスを使わずに色名の指定で同じことをできます。
use Term::ANSIColor;
print color('red') . "この文字は赤く表示されます\n";
print color('red') . "この文字も赤く表示されます\n" . colo
r('reset');
print "この文字は普通の色で表示されます\n";
print color('on_blue white');
print "この文字は青地に白で表示されます\n";
print color('reset');
color
関数に色を渡すことで,color('reset')
を出力するまで色は変わったままになります。
color('on_
のようにon_
を色名に付けると背景色の指定になります。それ以外にもbold
blink
under
Term::ANSIColor
のドキュメントを参照してください。
<続きの
本誌最新号をチェック!
WEB+DB PRESS Vol.109
2019年2月23日発売
B5判/
定価
ISBN978-4-297-10440-5
- 特集1
[Fastlyで柔軟&高機能!]
最新CDN入門
高速化,エッジコンピューティング, セキュリティ強化 - 特集2
[実践] Kotlin
基本からSpring,Java資産活用まで - 特集3
[速習] Puppeteer
ヘッドレスChromeでテスト&スクレイピング - 一般記事
[コミッター直伝]
Ruby 2.6徹底解剖
追加機能,変更点, Ruby 3に向けた準備