Slide 1

Slide 1 text

初めてのPerl @Arvelt

Slide 2

Slide 2 text

自己紹介 最近興味あること: Web系かっこいい。Android、Ruby on Rails。 …え、Perl? 仕事: SIerで客先常駐。たまに違う現場へ。   Java、COBOL、(ASP.NET、VB.NET) 名前:**** twitter:@Arvelt        はてなID:arvelt ブログ:arveltの技術メモ

Slide 3

Slide 3 text

初めてのPerl 1-1.CSVファイルを読みこむ。 1-2.ディレクトリの一覧を表示する。 1-3.ファイルをFTP経由でアップロードする。 1-4.Excelファイルを読み込む。 1.Perlを使ってみた。 2.まとめ

Slide 4

Slide 4 text

1.Perlを使ってみた とある環境 Windows7 Perofessional 32bit ActivePerlをダウンロードして、インストール >Perl --version This is perl 5, version 14 >perl -e "print 'hello,world!'" hello,world!

Slide 5

Slide 5 text

1-1.CSVの読み込み typeperfコマンドで吐き出したCSVファイル。 これを読み込んで、直近15秒くらいの平均を計算。 負荷を判定しようとした。

Slide 6

Slide 6 text

1-1.コード例 open(IN, 'perform.csv'); while(){ #改行除去、カンマ区切りで配列へ chomp ($_); my @data = split(/,/, $_); #クォーテーション除を for (my $i=0; $i<@data; $i++) { $data[$i] =~ s/(")+//g; } #値の取得 $value1 = $data[1]; $value2 = $data[2]; $value3 = $data[3]; } close(IN);

Slide 7

Slide 7 text

1-1.思ったこと ・Cっぽい文法? ・$てやると変数 ・$_は引数の1つ目を受け取れる

Slide 8

Slide 8 text

1-2.ディレクトリ一覧表示 引数で渡したパスのディレクトリとファイルを表示する。 オプションの有無でサブディレクトリも表示するかを切り替える >list.pl "C:" -r みたいに使いたい。

Slide 9

Slide 9 text

1-2.コード例 #------------------------------------------------------------------------- # Usage:command path [-r] # Usage:command path [--recursive] #------------------------------------------------------------------------- use Getopt::Long; #コマンドオプション my $opt_recursive = 0; #サブディレクトリを検索するかどうか GetOptions( 'recursive' => \$opt_recursive ); my $directory = $ARGV[0]; if ( ! $directory ) { print "No Args ! Usage:command PATH" ; exit(1); } searchDirectory( $directory ); #指定したディレクトリを走査する再帰処理

Slide 10

Slide 10 text

1-2.思ったこと ・USE ってやるとライブラリを使える ・=>は、"key"=>"value"として使うらしい ・$ARGV にコマンド引数が配列で格納される ・空文字と数字の0は偽になるらしい

Slide 11

Slide 11 text

1-3.ファイルアップロード コンパイルしたモジュールを開発サーバーへアップロードした い。 あるディレクトリに格納されているモジュールを、 FTP経由で開発サーバーへとアップロードしようとした。

Slide 12

Slide 12 text

1-3.コード例 use Net::FTP; use Config::Tiny; my $config = Config::Tiny->new->read('setting.ini'); my $ftp=$config->{_}->{FTP_SERVER} ; my $ftp_id=$config->{_}->{FTP_ID } ; my $ftp_pass=$config->{_}->{FTP_PASS } ; my $ftp = Net::FTP->new($FTP_SERVER) or die "Cannot connect to $FTP_SERVER: $!"; $ftp->login( $ftp_id, $ftp_pass); # ログイン $ftp->put( $uploadfile ) ; # アップロード $ftp->quit;

Slide 13

Slide 13 text

1-3.思ったこと ・こんなに少ないStep数で処理できてすごい!(脳内Java比) ・=~ /.*hoge.*/ みたいにいきなり正規表現でかけるのがすご い ・文字コードがよくわからない。

Slide 14

Slide 14 text

1-4.Excelを読み込む Excelファイルを読み込んで 記載されているパスを取得し、 そのパスにあるモジュールを開発サーバーにアップロードする。

Slide 15

Slide 15 text

1-4.コード例 use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Excel'; my $excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit') || die 'cannot get active excel! interupted.'; my $book = $excel->Workbooks->Open( 'test.xlsx' ) || die "no File. interupted. :$!"; # ファイルを開く my $sheet = $book->Worksheets( 'sheet1' ) || die 'No sheet! Interupted.'; #シートを取得する my $data = $sheet->Range("A1")->{Value} || die 'No ref. Interupted.'; print "$data\n"; #値を取得する #ブックを閉じる $book->Close(); #エクセルを閉じる $excel->quit();

Slide 16

Slide 16 text

1-4.思ったこと ・ || die 、or dieをつけると例外をキャッチしてくれる、、、? ・Excel操作めんどくさい。ExcelのDOM構造を知ってないとか けない ・Close処理忘れると悲惨 ・Excel方眼紙作成時の強い味方に・・・ ・文字コードのせいか、パスが文字化けして読み込めなかった。 同じ処理をRubyで書いてみたら 一発で動いた件について

Slide 17

Slide 17 text

2.まとめ ・ソフトをインストールするのに稟議が必要な環境とかでも、デフォルトで入ってること が多い。Windows? 残念! ・型とかなくてがんがん書いていけるので、ちょっとした自動化などをさくっと書きたい 時によいかも。 ・文字コードがめんどくさい ・省略されすぎてわかりづらい。 ・フリーダムに書け過ぎるから大きなアプリケーションだと統一感がなくなるかも? ・有名なフレームワークとかあるのかな? ・やりたいことから、おすすめのCPANモジュールを調べる方法は?

Slide 18

Slide 18 text

2.まとめ ・文字コードについて   ○読みこむ先のファイルの文字コード   ○書き込む先のファイルの文字コード   ○ソースコード内に記載されたリテラルの文字コード   ○Perl内部で処理する際の文字コード

Slide 19

Slide 19 text

ご清澄ありがとうございました。