perl

「Illegal octal digit(8 進数で 8 か 9 を使いました。)」というエラーが出るときはどんなとき?

初めて見たエラーだったので、実験して遊びました。 ※遊び&実験なので、そんなこと普通はしないだろう、的なことをしています。そこら辺は突っ込まないでください。 [abyss@abyss web1]$ perl $a = "08"; $b = 2; print $a+$b; print "\n"; 10 [abyss@abyss…

unlink〜ワイルドカードを使って複数ファイルを消す

どーも、ワイルドカード「*」で複数ファイルが消えないなー、と思っていたら、文法が間違っていた!なんてことでしょう。 ◎正しい書き方 unlink <~/*.tsv>;私はこんな書き方していました。うっかり。 ◎間違った書き方 unlink "~/*.tsv";そうなんです。ダブル…

ヒアドキュメントでエラーが出る〜Can't find string terminator〜

ヒアドキュメントを使っているときに、以下のエラーが出ていて、うんうんうなってしまった。 [Tue Oct 26 16:45:40 2010] [error] [client ::1] Can't find string terminator "ERR_HTML" anywhere before EOFま、原因は以下を守ってなかったから。 ■ヒアド…

環境変数一覧を見たい

以下のスクリプトを、ブラウザからアクセスが飛んできたときに回るプログラムに書き込めばおっけー。 print "Content-Type: text/html\n\n"; print "hello"; print "</br>"; foreach (keys %ENV){ print "$_:$ENV{$_}"; print "</br>"; }

「Premature end of script headers」のエラーが出たときの解消法

MVCモデルの勉強として、先輩がちっちゃなMVCモデルのプログラムを作ってくれました。それをベースにいろいろ機能追加をはかっていたのですが、デバック方法がわからない!というか、ブラウザにデバック内容を表示させたい。おまけにapacheのログでこんなエ…

ref関数〜変数の型を確認したい〜

ref関数は、引数によって真か偽かを返す関数です。 ■引数がリファレンスの場合 「真」つまり、リファレンスが参照する型を返します。 なお、返す型は以下です。 ・SCALAR スカラー ・ARRAY 配列 ・HASH ハッシュ ・REF リファレンス ・CODE サブルーチン ・…

あるstatusが数字で定義してあって、その数字に対応する単語でそれぞれのstatusを置き換えたいとき

htmlなどで、statusをコトバで表示させたいときに便利なやり方を先輩がしていたので、メモ。 ■ポイント グローバル変数で置き換えるコトバを配列にしておくこと ※要素番号がstatusと等しくなるようにこんな対応のstatusが定義されているとします。 status=0…

初めてのフレームワークやモジュールを使ってコードを書くときのポイント

どーも、初めてのフレームワークを使ってコードを書くのが他の人と比較しても無駄なくらい遅いので、その遅さの原因を探るべく先輩に聞いてみた。 ポイントは以下だそう。 ◎メソッドなどの関数の機能を調べるとき ・メソッド名や関数名から機能を推測する ・…

ファイルの読み込み開始位置と終了位置を指定して書き出す〜seek、read

●ポイント ◎seek([ファルハンドル], [起点からの位置(スタート地点になる)], [起点]); 起点は、0だとファイルの先頭、1だと現在の位置、2だとファイルの末尾になる。(0, 1, 2以外は入りません) 例), seek($fh, 20,0); →ファイルの先頭から20バイト進んだとこ…

File::Temp〜一時ファイルを保存するディレクトリと一時ファイルの名前を生成する。

画像をアップロードしてもらう、という処理なんかに有効です。画像アップロードの処理として、アップロードしてくれた画像を一時ファイルとして保存して成形し、成形後に一時ファイルを消したいとします。そんな時に役立つのがFile::Tempです。File::Tempは…

世にさらすサービスのコードでopenを使っているときに気をつけないといけないこと

例えば、jsonファイルをアップロードしてもらう仕組みを作ったとします。処理の流れは、受け取ったjsonファイルを一時ファイルとして保存し、ファイルopenしてごにょごにょと処理をするというものにしているとします。で、ファイルopenの部分を以下のように…

OSの影響を考えなくても改行コードを落とす方法〜正規表現

perlには、chopやらchompやら改行を落とす関数がありますが、これらは改行コードを落とすには不十分です。そこで、以下のように正規表現を使って書けば、どんな改行コードでも落とせちゃいます。 $line =~ s/[\r\n]+\z//;そもそも、なんでchopやchompでは役…

useの種類

perlで、use strict;とかuse Data::Dumper;とかしますよね。useのあとに続く言葉に、大文字で始まったり小文字で始まったりといろいろなので、規則性を調べてみた。 useと書くときは、以下の3種類。 ■モジュールをnewするとき。 ■モジュールのメソッドをイン…

正規表現、ループ処理の練習〜タブ区切りの.txtを.csvにする。

最初に、このお題の私の回答を見てくれた先輩の言葉。 ● \ は、「エスケープに使用している」のか「そういう文字そのもの」なのか常に意識して考えなくてはならない。 ●dieが適切な部分に使えるかどうかで、どれくらいのperl使いなのか分かる。 ●プログラム…

無名配列、配列のリファレンスとデリファレンス、ループ処理の練習〜マトリックスを転置しよう

●お題 まず、自分で以下のような配列を作る。 1,2,3,4,5 6,7,8,9,10 11,12,13,14,15 16,17,18,19,20 21,22,23,24,25 作った配列を、以下のように転置する。 1,6,11,16,21 2,7,12,17,22 3,8,13,18,23 4,9,14,19,24 5,10,15,20,25 ●回答 #! /usr/bin/perl use …

ハッシュと正規表現、ループの練習〜ある一日のapachログを10分ごと、30分ごとにカウントしよう

準備物は、ある一日のapacheのログが書かれたファイルです。 そして、いきなり回答です。 #! /usr/bin/perl use strict; use warnings; use Data::Dumper; my %count10; #10分ごとのカウント my %count30; #30分ごとのカウント open(FH,'<access'); # accessはログのファイル while(my $data = <FH>){ chop($data); my </access');>…

正規表現(3)〜オプションと置換

とりあえずの更新3つめ。今日上げた他の2つの記事と合わせて、後日書き直します。 $s =~ /.+/ # '/' でなくてもよい。ただし、その場合は'm'を省略することができない。 $s =~ m/.+/ $s =~ m!.+! $s =~ m%.+% $s =~ m{.+} ### URL(例) ### $_ = 'http://www.…

正規表現(2)〜正規表現のオプションとsplitで正規表現を使う

理解してもらうということをまったく考慮していない記事ですみません。とりあえずの更新第2弾。こちらもあとで書き直します。 $s =~ /.+/ # '/' でなくてもOK $s =~ m/.+/; $s =~ m!.+!; $s =~ m%.+%; $s =~ m{.+}; ### URL(例) ### $_ = 'http://www.keyman…

正規表現(1)〜メールアドレスかどうか、URLかどうかをチェックする

とりあえずの更新をします。あとできれいに書き直しますー。 #正規表現はなるべく長くマッチしようとする '<a>aaa</a><b>bbb</b><c>ccc</c>' =~ />(.+) 'aaa</a><b>bbb</b><c>ccc' #最短一致=>+?もしくは*?を使用する。 '<a>aaa</a><b>bbb</b><c>ccc</c>' =~ />(.+?)</;#=>何かが1個以上連続したあとの一番最初に来る<にマッ…

Test::MoreでWide character in print at〜と怒られる

■エラー内容 Test::Moreのis_deelpyで日本語での出力「本文だよ」を期待していたが、「Wide character in print at 〜」と怒られるので解決方法を探しました。 具体的には、こんなエラー↓↓ ■原因 utf-8フラグが立っている、もしくはASCIIでない文字をTest::M…

空、0、undefはif文では偽なのか真なのか

今更ながら、ちょっと迷ってしまったのでメモします。さて、表題の答えは、偽と真どちらでしょうか。 正解は、空も0もundefも「偽」!! 忘れないようにしなきゃ。たまに、ころっと忘れる時があるんだよねぇ。。。

画像の縦横サイズを取得する〜Image::Size

cpanは以下のurl。 http://search.cpan.org/~rjray/Image-Size-3.220/lib/Image/Size.pm 依存モジュールもたった3つ。Cのコンパイルも不要。これまた使い方がびっくりするほど簡単。◎使い方 use Image::Size qw/imgsize/; my ($width,$height)=imgsize($inpu…

並べ替え〜sort, substr, lengthも使ってみる

◎お題 要素が数値だけのものと文字列だけのものと2つ配列を用意し、数値だけのものは文字列順と数値順、桁数順でそれぞれ昇順と降順に並べ替え、文字列だけのものは文字列順と文字数順でそれぞれ昇順と降順に並べ替えて出力する。 #! /usr/bin/perl use stri…

無名サブルーチンを作って実行する

◎お題 無名サブルーチンを、引数のいらないものといるものの2パターン作り、それぞれを実行して実行結果を出力する。 #! /usr/bin/perl use strict; use warnings; my $studyB=sub{ my ($katei, $takasa, $jyoutei) = @_; my $menseki = ( $katei + $jyoutei…

リファレンスとデリファレンスを利用してサブルーチンをまわす

◎お題 引数のいらないサブルーチンを作り、そのリファレンスを使用してサブルーチンを実行する。 #! /usr/bin/perl use strict; use warnings; #通常のやり方でサブルーチンを実行してみる &print; my $ref_sub = \&print; #二通りのやり方で、サブルーチン…

サブルーチンのリファレンスとデリファレンス

◎お題 サブルーチンを作り、そのサブルーチンのリファレンスを表示する。また、そのリファレンスをデリファレンスしてサブルーチンから結果を得る。 #! /usr/bin/perl use strict; use warnings; #計算結果を表示 print &keisan(4,5),"\n"; #サブルーチン、k…

配列の配列、無名配列

◎本日のお題一つ目 無名配列を使用して、ネストした配列を作り、任意の値をprintする。 #! /usr/bin/perl use strict; use warnings; my @array=( 0, ['00','01',['0200','0201','0202',['020300','020301',],],], [10,11,[1200,1201,1202,[120300,120301,],…

リファレンスとデリファレンスを使用して、配列の要素をprintする

◎本日2つめのお題 配列を定義し、その配列のリファレンスをつかってある要素の値をデリファレンスして取得する。 #! usr/bin/perl use strict; use warnings; my @array=(0,1,2,3,4,5,6,7,8,9); my $ref_array=\@array; print "\@array=@array\n"; print "\$…

サブルーチンにリファレンスで引数を与えて計算結果をもらう

先輩に、どーやったら早くプログラミングスキルが身に付きますか、と聞いてみた。答えは、「簡単なプログラムをたくさん書いて実際に動かし、仕組みを理解すること」。なので、筋トレのごとく、小さいプログラムを一日3つは書いていきたいと思います。◎今日…

cpan経由でモジュールをインストールする

今更って感じですが、よくやり方を忘れてしまうのでちょっと書きます。シェルで以下のコマンドを打って行ってください。 (1)まず、rootになります。 sudo su -(2)cpanを起動します。 perl -MCPAN -e shell(3)インストールしたいモジュール(例としてFlickr::A…