初めてのPerl
@Arvelt
自己紹介
名前:****
twitter:@Arvelt        はてなID:arvelt
ブログ:arveltの技術メモ

仕事:
  SIerで客先常駐。たまに違う現場へ。
  Java、COBOL、(ASP.NET、VB.NET)

最近興味あること:
 Web系かっこいい。Android、Ruby on Rails。
                                      …え、Perl?
初めてのPerl
1.Perlを使ってみた。
  1-1.CSVファイルを読みこむ。
  1-2.ディレクトリの一覧を表示する。
  1-3.ファイルをFTP経由でアップロードする。
  1-4.Excelファイルを読み込む。

2.まとめ
1.Perlを使ってみた

とある環境
Windows7 Perofessional 32bit

ActivePerlをダウンロードして、インストール
>Perl --version
This is perl 5, version 14

>perl -e "print 'hello,world!'"
hello,world!
1-1.CSVの読み込み

typeperfコマンドで吐き出したCSVファイル。
これを読み込んで、直近15秒くらいの平均を計算。
負荷を判定しようとした。
1-1.コード例
open(IN, 'perform.csv' );
while(<IN>){

    #改行除去、カンマ区切りで配列へ
    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);
1-1.思ったこと

・Cっぽい文法?
・$てやると変数
・$_は引数の1つ目を受け取れる
1-2.ディレクトリ一覧表示
引数で渡したパスのディレクトリとファイルを表示する。
オプションの有無でサブディレクトリも表示するかを切り替える

>list.pl "C:" -r
みたいに使いたい。
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 ); #指定したディレクトリを走査する再帰処理
1-2.思ったこと

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

コンパイルしたモジュールを開発サーバーへアップロードした
い。

あるディレクトリに格納されているモジュールを、
FTP経由で開発サーバーへとアップロードしようとした。
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;
1-3.思ったこと
・こんなに少ないStep数で処理できてすごい!(脳内Java比)
・=~ /.*hoge.*/ みたいにいきなり正規表現でかけるのがすご
い
・文字コードがよくわからない。
1-4.Excelを読み込む
Excelファイルを読み込んで
記載されているパスを取得し、
そのパスにあるモジュールを開発サーバーにアップロードする。
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 "$datan"; #値を取得する

#ブックを閉じる
$book->Close();

#エクセルを閉じる
$excel->quit();
1-4.思ったこと
・ || die 、or dieをつけると例外をキャッチしてくれる、、、?
・Excel操作めんどくさい。ExcelのDOM構造を知ってないとかけ
ない
・Close処理忘れると悲惨
・Excel方眼紙作成時の強い味方に・・・
・文字コードのせいか、パスが文字化けして読み込めなかった。




                         同じ処理をRubyで書いてみたら
                         一発で動いた件について
2.まとめ
・ソフトをインストールするのに稟議が必要な環境とかでも、デフォルトで入ってること
が多い。Windows? 残念!
・型とかなくてがんがん書いていけるので、ちょっとした自動化などをさくっと書きたい
時によいかも。

・文字コードがめんどくさい
・省略されすぎてわかりづらい。
・フリーダムに書け過ぎるから大きなアプリケーションだと統一感がなくなるかも?
・有名なフレームワークとかあるのかな?
・やりたいことから、おすすめのCPANモジュールを調べる方法は?
2.まとめ
・文字コードについて
  ○読みこむ先のファイルの文字コード
  ○書き込む先のファイルの文字コード
  ○ソースコード内に記載されたリテラルの文字コード
  ○Perl内部で処理する際の文字コード
ご清澄ありがとうございました。

More Related Content

PPT
Solaris Container
PDF
シェル入門
PPTX
C#で最も使われていない言語機能はこれだ!
PPTX
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
PDF
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
PDF
恋に落ちるデプロイツール
PDF
Rails初心者レッスン lesson5 2edition
KEY
ひのきのぼうだけで全クリ目指す
Solaris Container
シェル入門
C#で最も使われていない言語機能はこれだ!
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
恋に落ちるデプロイツール
Rails初心者レッスン lesson5 2edition
ひのきのぼうだけで全クリ目指す

What's hot (20)

PPTX
CMSとPerlで遊ぼう
PDF
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
PPTX
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
PDF
omoon.org の裏側 〜FuelPHP の task 活用例〜
PPTX
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版あります
PDF
PaaSの作り方 Sqaleの場合
PDF
Yesod on Heroku
PDF
FuelPHPで3種のprofilerを使ってみた
PPTX
Symfony Dump Server のご紹介
PPTX
Functions
PPTX
serverspecを使用したサーバ設定テストの実例
PDF
おまえらこのライブラリ使ってないの? m9 (2013-07)
PDF
15分でCakePHPを始める方法(Nseg 2013-11-09 )
PDF
コンテナ情報交換会2
PDF
NanoStrand
PPTX
やや関数型を意識した風Elixir/Phoenixご紹介
PDF
Sinatra and heroku for mac
PDF
Elasticsearch入門 pyfes 201207
PDF
お手軽並列処理
PPT
CPANの依存モジュールをもう少し正しく検出したい
CMSとPerlで遊ぼう
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
omoon.org の裏側 〜FuelPHP の task 活用例〜
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版あります
PaaSの作り方 Sqaleの場合
Yesod on Heroku
FuelPHPで3種のprofilerを使ってみた
Symfony Dump Server のご紹介
Functions
serverspecを使用したサーバ設定テストの実例
おまえらこのライブラリ使ってないの? m9 (2013-07)
15分でCakePHPを始める方法(Nseg 2013-11-09 )
コンテナ情報交換会2
NanoStrand
やや関数型を意識した風Elixir/Phoenixご紹介
Sinatra and heroku for mac
Elasticsearch入門 pyfes 201207
お手軽並列処理
CPANの依存モジュールをもう少し正しく検出したい
Ad

Similar to 初めてのPerl (20)

PDF
Hive undocumented feature
PDF
最新PHP事情 (2000年7月22日,PHPカンファレンス)
PPTX
Php in ruby
KEY
モダンmod_perl入門 #yapcasia
PDF
知って得する標準関数の使い方
PDF
Niigata.pm #1
PDF
behatエクステンションの作り方
PDF
Tottoruby 20110903
PDF
Nseg20120825
PDF
Web技術勉強会23回目
PDF
Rails初心者レッスン lesson1 3rd edition
PDF
Rails解説セミナー: リリースノート解説編
PPTX
実は怖くないDevOps
PDF
WDD2012_SC-004
PPTX
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
PDF
Hadoop on LXC
PPTX
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
PDF
ちょっとOverlayfsの実装、読んでみました(A brief report of overlayfs source code reading)
PDF
ソフトウェア工学2023 14 ビルド
PDF
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
Hive undocumented feature
最新PHP事情 (2000年7月22日,PHPカンファレンス)
Php in ruby
モダンmod_perl入門 #yapcasia
知って得する標準関数の使い方
Niigata.pm #1
behatエクステンションの作り方
Tottoruby 20110903
Nseg20120825
Web技術勉強会23回目
Rails初心者レッスン lesson1 3rd edition
Rails解説セミナー: リリースノート解説編
実は怖くないDevOps
WDD2012_SC-004
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
Hadoop on LXC
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
ちょっとOverlayfsの実装、読んでみました(A brief report of overlayfs source code reading)
ソフトウェア工学2023 14 ビルド
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
Ad

初めてのPerl