昔は、Perlは主にファイルのフォーマットに使用されていました。Perl 4.xがリリースされて以来、プログラムで使用されているのを見たことがありませんが、これらの機能はまだあります。
perlformのドキュメント、format関数、およびwrite関数を確認してください。
私が何年もしていないことを除いて、コードがどのように見えるかの例を示します。printf
それ以外の場合は、ステートメントを使用してください。%-10.10s
フォーマットのタイプを使用して、テキストフィールドのサイズを制限できます。これは、文字列を左揃えにし、10文字までパディングすることを意味しますが、10文字を超えないようにします。
また、現代のPerlに関する本を入手することをお勧めします。参照について教えてくれるもの。
参照を使用するようにプログラムを書き直しました。インデックスをまとめておく必要がある4つの別々の配列に分散するのではなく、すべてのデータが1つの配列になっていることに注意してください。
のENTREEについては$item[1]
、と言うことで話すことができます$item[1]->{ENTREE}
。読みやすく、保守も簡単です。
for
また、ループを変更したことにも注意してください。あなたの中で、あなたはあなたが7つのアイテムを持っていることを知らなければなりませんでした。新しいアイテムを追加した場合は、ループを変更する必要があります。$#menu
私の場合、メニューの最後のインデックスを取得するために使用します。次に、を使用(0..$#menu)
して、0から@menu
配列の最後の項目まで自動的にループします。
そして、あなたがそれにいる間:
printf
ステートメントの形式に注意してください。
use strict;
との使用に注意してくださいuse warnings;
。それは多くのエラーをキャッチします。
- コードのブロックをマークするために括弧と中括弧を使用する好ましい方法に注意してください。これが推奨される方法です。
そして今、プログラム:
use strict;
use warnings;
my @menu = (
{ ENTREE => "Hamburger", PRICE => 3.49, QUANTITY => 3 },
{ ENTREE => "Frankfurter", PRICE => 2.19, QUANTITY => 0 },
{ ENTREE => "French Fries", PRICE => 1.69, QUANTITY => 0 },
{ ENTREE => "Large Coke", PRICE => 1.79, QUANTITY => 4 },
{ ENTREE => "Medium Coke", PRICE => 1.59, QUANTITY => 0 },
{ ENTREE => "Small Coke", PRICE => 1.39, QUANTITY => 0 },
{ ENTREE => "Onion Rings", PRICE => 1.19, QUANTITY => 8 },
);
printf "%-3.3s %-10.10s %-6.6s %s\n\n", 'Qty', 'Desc.', 'Unit $', 'Total';
# Use $#menu to get the number of items in the array instead of knowing it's 6
foreach my $item (0..$#menu) {
# Dereference $menu[$item] to make $menu_item a hash
# This makes the syntax easier to read.
my %menu_item = %{ $menu[$item] };
if ( $menu_item{QUANTITY} ) {
printf "%3d %-10.10s %9.2f %7.2f\n",
$menu_item{QUANTITY}, $menu_item{ENTREE}, $menu_item{PRICE},
$menu_item{QUANTITY} * $menu_item{PRICE};
}
}
出力:
Qty Desc. Unit $ Total
3 Hamburger 3.49 10.47
4 Large Coke 1.79 7.16
8 Onion Ring 1.19 9.52