目次:
- 一意の行の収集
- テキストファイルの中には、複数の空白行が連続しているものがあります。次のプログラムは、2つ以上の空白行のすべてのインスタンスを単一の空白行に圧縮してテキストファイルを出力します。
- print sort();
- 次のプログラムは、一連の行を出力します。
- ディレクトリをサイズ別に表示するには、次の-fファイルテストを使用します。
- foreach $ k(sort {$ i {$ b} <=&gt $ i {$ a}}キー%i)
- ($ Name、$ Ext)= split( /。/、$ FullName、2);
- $ i = $ _;あなたの計算機を作成するためのプログラムです。 chomp($ i);ただし、($ i){last}
- while(@MyList)
- votahubo
短いプログラムはあまり良くないと思う人もいますが、それはPerlではそうではありません。ちょうど2行のPerlコードが長い道を行くことができます。この記事では、ほんのちょっとした小さなPerlプログラムを紹介します。
一意の行の収集
テキストファイルに重複している行が多数あり、一意の行のみを表示したい場合は、次のプログラムを使用してそれらを配列に集めることができます(この例では、@Uniqueと呼ばれます)。 :
<! - 1 - >open(IN、 "somefile。txt"); @ユニーク=(); ($ i {$ _} ++){push(@Unique、$ _)}}
ここでのトリックは$ i {$ _} ++が最初に0を返すということです$ _をキーとし、その後ろにゼロ以外の値を持つキーと値のペアを作成します。
複数の空白行を削除する
テキストファイルの中には、複数の空白行が連続しているものがあります。次のプログラムは、2つ以上の空白行のすべてのインスタンスを単一の空白行に圧縮してテキストファイルを出力します。
<!注:
空白行にスペースやタブなどの空白文字を入れることはできますが、表示可能な文字は使用できません。open(IN、 "somefile。txt"); $ PrevBlank = 0; while(){ if(/ S / or!$ PrevBlank){print $ _}
$ PrevBlank = / ^ s * $ /;
}
前の例のif文は、行に空白以外の文字がある場合、または前の行が空白でない場合はtrueです。 $ PrevBlankの代入は、現在の行が空白であるかどうかを示します。つまり、空白文字が0個以上あり、それ以外の文字はありません。
ソートされた順番でファイルから行を印刷する
Perlのソート機能がどれほど有用であるかを忘れるのは簡単です。次のプログラムはファイル全体を配列に読み込み、配列をソートして結果を出力します。短くて甘く、起動にはかなり効率的です:
open(IN、 "somefile.txt");print sort();
ファイルから行の範囲を印刷する
ファイルから数行だけを読みたいと思ったことはありますか?次のプログラムは、一連の行だけを出力します。あなたは2つの引数を指定してプログラムを実行します:必要な範囲とファイル名。たとえば、プログラムの名前を "showline"とし、somefileの10行目から20行目を見たい場合などです。 txtファイルでは、次のコマンドラインを使用します。
showline 10-20 somefile。 txt
次のプログラムは、一連の行を出力します。
open(IN、$ ARGV [1])またはdie "$ Fileを読み込めませんでした。 n "である。
($開始、$停止)=分割(/ - 、$ ARGV [0]);
for($ i = 1; $ i <= $ stop; $ i + = 1)
($ Line =; if($ i> = $ Start){print $ Line}}
ディレクトリ内のファイルのみを一覧表示する
ディレクトリ内のサブディレクトリを無視してファイルに集中したいことがあります。
foreach $ f(){if(-f $ f){print "$ fn"}}
ディレクトリをサイズ別に表示するには、次の-fファイルテストを使用します。
ファイル名以外のディレクトリリストをソートするには、プログラムは名前とその他の項目からなるレコードのリストをリスト内に保持しなければなりません。ハッシュは、キー(ファイル名)と値(他のディレクトリ情報)を持つレコードを持つこの種類のリストに使用するのに最適です。次のプログラムは、ディレクトリ内の各ファイルのサイズをリストしたハッシュを作成し、出力するアイテムをソートします。 (このプログラムを簡単に変更して、サイズではなく日付で並べ替えることができます。)
foreach $ f(){$ i {$ f} = -s $ f};
foreach $ k(sort {$ i {$ b} <=> $ i {$ a}}キー%i)
{printf "%8d%sn"、$ i {$ k}、$ k }
拡張子でディレクトリを並べ替える
ファイル名の一部で並べ替えるのは、ファイルサイズまたはファイルが変更された日付で並べ替えるよりもやや難しい処理です。次のプログラムは、ファイル名を2つに分割し、2つ目の部分でソートします。 UNIXまたはMacintoshシステムでPerlを実行している場合、このプログラムは、ファイル名にピリオドまたは1つのピリオドがない場合にのみ、予測可能です:
foreach $ FullName(){
($ Name、$ Ext)= split( /。/、$ FullName、2);
push(@Temp、 "$ Extt $ FullName");
}
foreach $ Val(sort(@Temp)){
($ Ext、$ FullName)= split(/ t /、$ Val);
print "$ FullNamen";
}
シンプルな計算機を作成する
シンプルで使いやすい計算機が必要でした。次のプログラムは、Perlのeval関数を使用して、入力した数式の答えを出力します。プログラムを終了するには、空白行を入力します。
while(){
$ i = $ _;あなたの計算機を作成するためのプログラムです。 chomp($ i);ただし、($ i){last}
$ o = eval($ i); "Answer = $ on"を印刷します。
}
プログラムを実行すると、
((2 ** 8)+(3 ** 8))
と入力すると、
> Answer = 6817
リストのランダム化
Perlでは、乱数を生成するのは簡単ですが、配列の順序をランダム化するのは簡単ではありません。それにもかかわらず、splice関数を使用して配列からランダムな要素を取り出し、その要素を別の配列に配置することができます。次のプログラムは、リスト@MyListをランダム化します。
my @TempList =(); while(@MyList)、(@MyList)
while(@MyList)
@MyList = @TempList;
ここでのトリックは、rand(@MyList)が0と@MyListの要素数の間の数値を選択し、スプライスがこの乱数を整数に変更することです。
ランダムニーモニックパスワードの生成
コンピュータユーザーに推測が容易ではないパスワードを思い出させることは、システム管理者にとって最も困難な仕事の1つです。人々は常に、誕生日やペットの名前をパスワードに使用することを主張しているように見えます。セキュリティを侵害すると、子供の遊びになります。
以下のプログラムはランダムなパスワードを生成します。しかし、覚えづらい文字の混乱の代わりに、パスワードは、発音可能な子音と母音のペアで表示されるため、多少ニーモニックです。いくつかの奇妙な音節を組み合わせることで、覚えやすいナンセンスフレーズを生成することができます。
パスワードの各音節は100個の数字のいずれかを表すことができる。したがって、
votahubo
のような単一の4音節のパスワードは、プログラムが生成する1億(100から4番目の)の可能なパスワードの1つです。システム管理者がこれらのパスワードを割り当てると、ユーザーは簡単に推測できるパスワードを選択するよりもセキュリティが強化されます。
print "シード番号を入力してください。 $ s =;
srand($ s ^時間); @c = split(/ * /、 "bcdfghjklmnprstvwxyz"); @v = split(/ * /、 "aeiou"); $ v [int(rand(5))]; $ 9 [$ 9、$ 8、 }
このプログラムの最初の2行は乱数のシードを初期化し、次の2行は20個の子音(マイナス q
)と5個のアルファベットの母音を含むリストを作成します。 forループは単純に4つの音節を出力します。