サンプル作り 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;

#perlコメントアウトは #

# 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;

#perlコメントアウトは #

# 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での複数条件の指定の仕方

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 ファイル名 | の後に grepperl の ^[A-Z0-9]*
であってるかな?
インスタンス定義部は税所の文字がかならず大文字のはず。
インスタンス定義以外で大文字(モジュール名)で始まる行は
 たぶんない。

行末の「;」をうまく使えるように。


★で!
 とにかくヒットさせたら、
 改行されて見えないところがあっても先頭及び


-----

perlで全行を $line に取り込む方法
正規表現page 326)ただし、「標準入力から」とある。

while (<>) {

$line .= $_;

}


ファイルからやる方法は確認しておくこと。


----

perlにおける =~ の意味を忘れたので、確認。


たとえば、先ほどのs全行取り込みにつづけて

while ($line =~ /正規表現/gs ) {

print "$3"\n;

}


とかやると、取り込んだ全行に対して繰り返し「マッチ」を実行、
してくれるらしい。


-----


全角文字列 小文字文字列
~~~~~~~~~~ ~~~~~~~~~~
module名 instance名
→ただし、instance名は小文字他「\」で始まる可能性があるので、
「小文字または \ 」にヒットするようにしておく必要あり。