ちょっと4月5月は忙しくて更新が滞ってすいません><
roadtoalinuxmintuser

theming

roundup
Perl2周目してて、忘れていたこと 4 00:30
メタ文字$は文字列の終わりにマッチするが
文字列の終わりが改行だったときは
改行の直前にマッチする

if("Hello¥n"=~/Hello$/){
print "Match¥n";
}else{
print "No Match¥n";
}

結果:Match

改行が複数個あった場合でも
$はあくまで文字列の最後にマッチする

if("Hello1¥nHello2¥n"=~/Hello¥d$/){
print "$& -- Match¥n";
}else{
print "No Match";
}

結果:Hello2 -- Match

修飾子/mをつけると
1つの文字列があたかも
改行で区切られた複数の文字列のように振る舞う

if("Hello1¥nHello2¥n"=~/Hello¥d$/m){
print "$&--Match¥n";
}else{
print "No Match¥n";
}

結果:Hello1--Match

my $sty="12,13,14";
を,で切り出すには
split(/,/,$str)以外に

if($str=~/(¥d+),(¥d+),(¥d+)/){
my ($num0,$num1,$num2)=($1,$2,$3);
}

ともできる

1回マッチさせたいとき

if($str=~/¥d+/){
print $&;
}

複数マッチさせたいとき

while($str=~/¥d+/g){
print $&,"¥n";
}

tooやseeなどにマッチさせたいとき

while($str=~/[qwrtyplkjhgfdszxcvbnm]([aeiuo])¥1/g){
print $&,"¥n";
}


/http:¥/¥/www¥.example¥.com/
を読みやすくするために
m|http://www¥.example¥.com|
とできる
もっと読みやすくするために
m|¥Qhttp://www.example.com¥E|
とできる
| Perl |
Perl2周目してて、忘れていたこと 3 18:40
ラベルはこう使う

my @file=('one.txt','two.txt','three.txt');
OUTER:foreach(@file){
open(FILE,$_) or die "$!";
while(<FILE>){
last OUTER if($_ eq 'EXIT');
last if($_ eg 'END');
print $_;
}
close(FILE);
}

do{}文はこう使う
untilとwhileは修飾子で
繰り返し分ではなくdo{}文なので
last,next,redoは使えない

my $line;
do{
$line=<STDIN>;
print $line;
}until($line eq 'END');

do{
$line=<STDIN>;
print $line;
}while($line ne 'END');

配列からパターンにあった要素のリストを作る

my @found=grep(/^S/,@week);
print "@found¥n";

結果:Sun Sat
| Perl |
Perl2周目してて、忘れていたこと 5 22:02
$text=<<"EOF";
From: itimannnennto@gmail.com
To: nisennnenn@gmail.com
Subuject: maekara@gmail.com

aisiteru-@yahoo.com
EOF

このような$textから、次のようなリストを得たい
(
'itimannnennto@gmail.com',
'nisennnenn@gmail.com',
'maekara@gmail.com',
'aisiteru-@yahoo.com',
)

1つの方法は
my @mail=();
while($text=~/[¥w.-]+@[¥w.-]+/g){
push(@mail,$_);
}
もう1つは
my @mail=($text=~/[¥w.-]+@[¥w.-]+/g);

重複要素の削除の仕方
my %count;
foreach(@words){
$count{$_}++;
}
my @array=sort keys %count;

tr///の慣用的使い方
my $str='This is Ken.';
my $count=($str=~tr/A-Z/A-Z/);
print $count;
結果:2

my $name="Shellingford";
(my $uname=$name)==tr/a-z/-A-Z/;
print "¥$name=$name¥n¥$uname=$uname";
結果:$name=Shellingford
$uname=SHELLINGFORD

grepはリストの中から正規表現で指定したのにマッチする要素をリストで返す
my @lines=("This is Perl¥n",
"Isnt that Perl?¥n",
"You must run Perl¥n",
"Perl is easy to learn¥n");
print grep(/Perl/,@lines);

sub &check{
unless(wantarray){
print "無効コンテキスト";
}elsif(wantarray){
print "リストコンテキスト";
}else{
print "スカラーコンテキスト";
}
}

my $str=`perl print_hello.pl`;
でprint_hello.plの実行結果が$strに入る
| Perl |
Perl2周目してて、忘れていたこと 2 21:19
以下の文をspliceを使って書くと
  1. push(@array,$item)

  2. $item=pop(@array)

  3. $item=shift(@array)

  4. unshift(@array,$item)

  5. $array[$index]=$item

  1. splice(@array,@array,0,$item)

  2. $item=splice(@array,-1)

  3. $item=splice(@array,0,1)

  4. splice(@array,0,0,$item)

  5. splice(@array,$index,0,$item)


ハッシュはこうして全部取り出す
foreach(sort keys %hash){
print "$_ -> $hash{$_}";
}

<=>をスペースシップ演算子と言う
$a<=>$bの時

$a<$bなら-1
$a==$bなら0
$a>$bなら1

-1なら$aが前にくる
1なら$bが前にくる

例えば、
$a==2
$b==4のとき
2<=>4となり
$a<$bなので-1を返す
-1なら$aが前にくる

大量にキーと値を取り出す場合
while(my ($a,$b)=each(%hash))
で取り出した方がメモリにやさしい

そのキーに対する値が存在するかは
if(exists($hash{$key}))
| Perl |
Perl2周目してて、忘れていたこと 14:15
$array[-1]は@arrayの最後の値を表す

$#arrayは@arrayの最後の添字を表す
なので、$array[$#array]==$array[-1]

scalar(@array)は@arrayの要素の数を表す
なので、$array[$#array]==$array[-1]==$array[scalar(@array)-1]

関数splitに//を与えると
文字列を1文字ずつ切り出したリストを作る
これを使ってカウンターを作ると

open(FILE,"etc/count.txt") or die "$!";
my $num=;
chomp($num);
$num++;
my @num=split(//,$num);
foreach(@num){
print qq|<img src="$_.gif" />|;
}
open(NEWFILE,"> ext/count.txt") or die "$!";
print NEWFILE $num;
close(NEWFILE);
close(FILE);


文字列" green blue red"を
スペースの含まないリスト("green","blue","red")にしたいとき
split(' ',' green blue red')とする
これはsplitが' 'を特別扱いしているため

push、unshiftは(@array,1,2,3,4)と
push、unshiftできる要素数は1つだけではない

spliceを使えばpop/push/shift/unshiftを実現可能
splice(ARRAY,OFFSET,LENGTH,LIST)
ARRAYのOFFSETからLENGTH分を削除し、そこにLISTを入れる意味

| Perl |
The book on CGI from Amazon have arrived! 00:26
この前言ってたCGIの本
Amazonから届きました

まぁ、でも...

今やってるPerlをもう1週した後の話
| Perl |
use vars qw($変数1 $変数2 ...) 18:24
C言語やJavascriptなんかでは
変数を複数同時に宣言したい場合
コンマを使って
var x,y;
int x,y;
とやれたはずだけど
Perlは簡単なことをしてないみたい

[Perl] my と local と our の違いについて - TAKESAKOのはてな出張所

ourとuse varsは等価で
our使った方が早いんだって

と思って
our qw($x $y $z)=(10,29,39);
とか
our ($x $y $z)=(10,29,39);
とか試したけどErrorだった

Perlで複数同時に宣言する方法は
use vars qw()しかないのかな?
| Perl |
cgiの本 17:10

これ買うことにしました
| Perl |
正規表現 3 20:46
7:30や12:00を正規表現で取り出す例

my @time=("8:12","12:00","24:00",23:59");

foreach my $time(@time){
if($time=~/([01]?[0-9]|2[0-9]):([0-5][0-9])/;
print "$time-o¥n";
}else{
print "$time-x¥n";
}
}

たまにはJavascriptもやってみるかな
| Perl |
正規表現 2 20:02
WebページのURLを正規表現で表すには
「¥」を多用しなくちゃならない

それを読みやすくするために
m|¥Qhttp://baker-street.jugem.jp/¥E|;
と書けるみたい

これは使える
メモメモ...
| Perl |
| 1/2 | >>

Show some apps list:


miku

Follow on your feed reader:


About this blog:

Linux Mint-centric chronicle.
Since 2009.
Info 更新日は土曜日です。

roadtoapython

roadtorubyist

git