サンプル作り 2014-09-28to29 1st ver
■perl のコードをファイルに書いて実行する方法。
テキストファイル test001.txt
に対して、perl のコード(ファイルに記述)
test.pl
を適用するには、
> perl test.pl test001.txt
例えば
test.plの中身はこんな感じ
<サンプル001>
------------------
#usr/bin/env perl (一番最初にヒットしたperlのバージョンを使用する)
while(<>) {
print $_;
}
-------------------
→これをコマンドラインで実行すると、
単純に test001.txt の内容を全部表示するだけ、
となる。
参考)
1行目に書く #~のところ
http://perldoc.jp/docs/perl/5.8.4/perlrun.pod
→他のコードの例もあるので、参考にすること。
■サンプル002
------------------
#usr/bin/env perl (一番最初にヒットしたperlのバージョンを使用する)
while( $line = <>) {
print $line;
}
-------------------
→実行結果はサンプル001と同じ。
■サンプル003
---------------------
#!usr/bin/env perl
$i=0;
while($line = <>){
$i = $i + 1;
# if ( $line =~ m/^\s+module/ ) { +を使うと先頭のスペース無(\sが0個)にマッチしない
if ( $line =~ m/^\s*module/ ) { *を使うと先頭のスペース無(\sが0個)にもマッチ(タブ、スペース何個でも対応)
print $i ;
print $line;
}
}
------------------
テキストサンプル
********************
module HOGEMODULE (
);
input afafa;
output gga;
endmodule
module HOGE2 ( ★先頭に半角スペースあり)
);
endmodule
module HOGE3 ( ★先頭にタブあり)
endmodule
******************************
■サンプルコード004
---------------
#!usr/bin/env perl
$i=0;
while($line = <>){
$i = $i + 1;
# if ( $line =~ m/^\s+module/ ) { +を使うと先頭のスペース無(\sが0個)にマッチしない
if ( $line =~ m/^\s*module/ ) { *を使うと先頭のスペース無(\sが0個)にもマッチ(タブ、スペース何個でも対応)
print $i ;
print $line;
}
# if ( $line =~ m/^\s*[A-Z0-9_]+/ ) {
# if ( $line =~ m/^\s*[A-Z0-9_]+/ ) {
if ( $line =~ m/^\s*[A-Z0-9_]+/ ) { //インスタンス名の先頭に
if ( $line =~ m/^\s*[A-Z0-9_]+/ ) {
print $i;
print $line;
}
}
--------------------------
■サンプル00
--------------------------
#!usr/bin/env perl
$i = 0;
while( $line = <> ) {
$i = $i + 1;
# if ( $line =~ m/\;/ ) { ★意図)「;」を含む行にマッチ
#コメント対応版(UTF-8とか日本語はNGと考えられる→.*のところ)
if ( $line =~ m/$\;\s*\n/ || $line =~ m/$\;\s*\/\/(.*)/ ) {
#★意図)行末が;スペース\nで終わるか、
#または;スペース(or無)//英語コメント、にマッチ)
print $i:
print $line;
}
}
-------------------------
Perl講座(http://www.envinfo.uee.kyoto-u.ac.jp/user/susaki/perl/index.html
)
→http://www.envinfo.uee.kyoto-u.ac.jp/user/susaki/perl/condition.html
■perl では
m/正規表現など/i
というので「マッチするかどうか」を調べることが
できる。
if文の条件式とかで良く使われている。
if ( $line =~ m/正規表現/i ) {
print "Match\n"; //perlでは()不要
}
→デリミタは変えられる。
例)
if ( $line =~ m{正規表現}i ) {
if ( $line =~ m#正規表現#i ) {
※ただし、正規表現の部分の中で「#」を使う時は\#としてエスケープしてやらないといけないことに注意。(p.71)
→昔よく#にしてコードを見やすくしてたなぁ。
----------------
■
cat -n ファイル名 | grep '^module' |
cat -n ファイル名 | の後に grep か perl の ^[A-Z0-9]*
であってるかな?
→インスタンス定義部は税所の文字がかならず大文字のはず。
→インスタンス定義以外で大文字(モジュール名)で始まる行は
たぶんない。
行末の「;」をうまく使えるように。
★で!
とにかくヒットさせたら、
改行されて見えないところがあっても先頭及び
-----
perlで全行を $line に取り込む方法
(正規表現page 326)ただし、「標準入力から」とある。
while (<>) {
$line .= $_;
}
ファイルからやる方法は確認しておくこと。
----
perlにおける =~ の意味を忘れたので、確認。
たとえば、先ほどのs全行取り込みにつづけて
while ($line =~ /正規表現/gs ) {
print "$3"\n;
}
とかやると、取り込んだ全行に対して繰り返し「マッチ」を実行、
してくれるらしい。
-----
全角文字列 小文字文字列
~~~~~~~~~~ ~~~~~~~~~~
module名 instance名
→ただし、instance名は小文字他「\」で始まる可能性があるので、
「小文字または \ 」にヒットするようにしておく必要あり。