Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
初めてのPerl
Search
arvelt
May 21, 2015
Programming
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
初めてのPerl
arvelt
May 21, 2015
More Decks by arvelt
See All by arvelt
HugoとNetifyで作る静的サイト
arvelt
0
580
Hello Pebble Watch
arvelt
1
88
サバイバルゲームのCQB
arvelt
1
570
枯れた技術の水平思考
arvelt
2
860
Other Decks in Programming
See All in Programming
カツオ、ご期待ください
suneo3476
0
130
setup-vp GitLab対応の裏側
naokihaba
0
140
Java 27新機能 / Java 27 new features
kishida
2
190
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
120
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
180
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
390
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
660
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1k
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
430
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
130
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2.6k
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
250
Featured
See All Featured
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
290
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
A Soul's Torment
seathinner
8
3.7k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
Claude Code のすすめ
schroneko
67
230k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Six Lessons from altMBA
skipperchong
29
4.5k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Transcript
初めてのPerl @Arvelt
自己紹介 最近興味あること: Web系かっこいい。Android、Ruby on Rails。 …え、Perl? 仕事: SIerで客先常駐。たまに違う現場へ。 Java、COBOL、(ASP.NET、VB.NET) 名前:****
twitter:@Arvelt はてなID:arvelt ブログ:arveltの技術メモ
初めてのPerl 1-1.CSVファイルを読みこむ。 1-2.ディレクトリの一覧を表示する。 1-3.ファイルをFTP経由でアップロードする。 1-4.Excelファイルを読み込む。 1.Perlを使ってみた。 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 "$data\n"; #値を取得する #ブックを閉じる $book->Close(); #エクセルを閉じる $excel->quit();
1-4.思ったこと ・ || die 、or dieをつけると例外をキャッチしてくれる、、、? ・Excel操作めんどくさい。ExcelのDOM構造を知ってないとか けない ・Close処理忘れると悲惨 ・Excel方眼紙作成時の強い味方に・・・
・文字コードのせいか、パスが文字化けして読み込めなかった。 同じ処理をRubyで書いてみたら 一発で動いた件について
2.まとめ ・ソフトをインストールするのに稟議が必要な環境とかでも、デフォルトで入ってること が多い。Windows? 残念! ・型とかなくてがんがん書いていけるので、ちょっとした自動化などをさくっと書きたい 時によいかも。 ・文字コードがめんどくさい ・省略されすぎてわかりづらい。 ・フリーダムに書け過ぎるから大きなアプリケーションだと統一感がなくなるかも? ・有名なフレームワークとかあるのかな?
・やりたいことから、おすすめのCPANモジュールを調べる方法は?
2.まとめ ・文字コードについて ◦読みこむ先のファイルの文字コード ◦書き込む先のファイルの文字コード ◦ソースコード内に記載されたリテラルの文字コード ◦Perl内部で処理する際の文字コード
ご清澄ありがとうございました。