各出力行の単語リストの構成
これらの行はアルファベットの順序には、サブ文字列は、キーワードでの起動を使用して使用してソートする必要があります。キーワード列の50の後なので、以前のイラストの特別な種類のヘルパールーチンは、これらのサブを掻い摘ん文字列の並べ替えルーチンnumeric_sortに似ている必要が始まります。これは、規則では、前のルーチンが呼び出されると、グローバル変数$ aと$ bは、2つのデータ要素は、この場合、レポートの行()で割り当てられている必要があります上で比較する必要がありますしています。
サブby_keystr(私の$文字列1 = SUBSTRは($、50);私$ str2二つ= SUBSTRは($ Bの、50);場合($ str1 LTは$ str2二つ)(戻り-1;)elsif($ str1式$ str2二つ)(戻り0;)他(返す1;))
このサブルーチンは、ローカル変数は、2つのサブ文字列を格納する必要があります。 Perlの(または、これには、宣言されて、内側のブロック)のスコープの変数のスコープは、関数の本体に限られているの宣言を許可します。これらの変数は、キーワードを私;ここでは、並べ替えのヘルパー関数は2つのローカル変数$ str1と$ str2二つていると宣言されます。これらは、サブ文字列は、2つの生成された行からの位置は50で始まるを含む。 ltと式の比較、これらの文字列で行わPerlでのcmp演算子を使用して簡略化できる(これは演算子は、数値の並べ替えのヘルパー関数のコンテキスト内で上記の文字列バージョン)です。メインのボディながら、分割は、入力ラインでループの動作単語のリストにして、このリストの処理。
($タイトル=中 )(chomp($タイトル); @タイトル=分割/ /、$タイトル; ... foreachの$私は(0 .. $#タイトル)($ワード= $タイトル[$私]; ... ))
各単語のかどうかのキーワードを判断するテストする必要があります。これは、単純な正規表現のマッチを使用して行うことができます。この正規表現のパターンがある文字列$ Wordで開催の冒頭に大文字:もし($ Wordのように指定=〜/ ^ [AZ順] /)(... )=〜演算子は、Perlの正規表現演算子は一致しています、これは$ aの値は、Wordとの比較を呼び出すために使用されている/ ^ [AZ順] /パターンの場合、現在の単語をキーワードとして、その後に分類されている単語を前に、開始文字列を形成すると、キーワードと組み合わせて、残りの言葉を最後の文字列形式を組み合わせています。これらの文字列を、最終出力用の行を生成するように組み合わせることができます。これは、sprintf関数を使用して(これは、として、Cのstdioライブラリにおいて同じ。)達成されます。 sprintf関数は、その結果として、この文字列を返すメモリ内の文字列を作成します。 printfのと同様に、はsprintf書式指定文字列と引数のリストをとります。出力ラインを示すように、ステートメントを使用して生成することができます:
$行=はsprintf"%50%50 \ N"は、$起動すると、$エンド;
完全なプログラムです:
#!/ usr / binに/ perlをサブby_keystr(私の$文字列1 = SUBSTRは($、50);私$ str2二つ= SUBSTRは($ Bの、50);場合($ str1 LTは$ str2二つ)(戻り-1;)elsif ($ str1式$ str2二つ)(戻り0;)他(返す1;)
)コレクション@ =();中($タイトル= )(chomp($タイトル); @タイトル=分割/ /、$タイトル$開始="";私は(0 .. $#タイトル)($ $ foreachのワード= $タイトル[$私];場合($ワード=〜/ ^ [AZ順] /)($エンド="";($論文= $私$ jに対して Perlでは、常に別の方法です! Perlのjoin関数を使用します$最後のリストの建物のもう一つの方法:
$ end'を'$タイトルに参加= [$私.. $#タイトル];
(Perlのperlfuncに記載)join関数は二つの引数-表現とリストがあります。これは、リストの別の文字列を結合することにより、式の値を区切り文字要素として使用されている文字列を作成します。 Perlで数千人のサブルーチンのライブラリが付属し、多くの場合、作業の大半は、既存のルーチンを使って行うことができます。しかし、あなた自身のサブルーチンを定義する必要がある-場合は、単に自分のコードの上を片付けるのを避けるため過度に大規模なメインラインプログラム。 Perlのルーチンとして定義されます:
サブ名ブロック
ルーチンは、戻り値が、このいずれかの最後の文を実行するか、値を明示的にreturnステートメントで指定された値です。引数に渡されたルーチンは、1つのリストに結合される- @ _.個々の引数のインデックスで、このリストに分離される可能性がありますまたは左辺値としてリストリテラルを使用します。としての最後の部分では、並べ替えのヘルパー関数を示すように、サブルーチンは、文書のperlsubを一部に与えられている独自のローカルスコープ内のサブルーチンvariables.Manyの詳細を定義することができます。括弧を完全にサブルーチン呼び出しでは省略可能です:
Process_data($引数1、$値arg2、$値arg3);されていると同じProcess_data $引数1、$値arg2、$値arg3;
このようなルーチンの定義です:
サブ進数(私の$ = $ strを_ [0];私$コード= 0;(私のドルのⅰ= 1; $私 このサブルーチンを呼び出すことができる:
$ = STR"に- rwxr - Xの---"; $ accesscode = 8 $ str;
2番目の例では、かどうかを特定の文字列のリストに存在することを決定するためのサブルーチンを考慮:
メンバー(アイテムリスト);
前述のように引数をルーチンは、1つのリストに結合され、彼ら以外のルーチンに分割する必要があります。処理は、foreachループを含むのかどうかを次のリストメンバーは、目的の文字列と等しい:
リスト@サブメンバー(私の($エントリー)= @ _;#個別の引数membエントリーリスト()(場合($ memb式$)(を返す1;))@ $ foreachの
戻り0;)
実際には、別の方法です。必要はないメンバサブルーチンを発明するためのPerlはすでにgrepをルーチンでの一般的なバージョンを持っています。grepをmatch_criterionデータリストがリストコンテキストで使用すると、grepはサブデータリストのそれらのメンバへの参照をリストには、テストを満たす生成されます。ときは、スカラーコンテキストで使用される場合、grepを返すデータリストのメンバーの数が要件を満たしています。
記事は、ホルヘマルティネスが提出
免責事項:弊社のウェブサイトは、この資料の内容については責任を負いません。 Webarticles無料の情報リソースです。
重要: この記事は、"各出力行の単語リストの"自動ソフトウェアによって翻訳され、構成されます。大変申し訳ございませんが発生した可能性があります任意のスペルミスを感じている。お客様のご理解いただき、ありがとうございます。