Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
初めてのPerl
Search
arvelt
May 21, 2015
Programming
120
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
86
サバイバルゲームのCQB
arvelt
1
530
枯れた技術の水平思考
arvelt
2
840
Other Decks in Programming
See All in Programming
「エンジニアインターン、どうやって取った?」準備のリアルを語るLT会 Progate BAR
akiomatic
0
120
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
13
3.5k
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
230
プロパティの順序で型推論が壊れる!? TypeScript6.0の修正からContext-Sensitivityの仕組みを追う
bicstone
2
1.3k
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.3k
Spec-Driven Development with AI-Agents: From High-Level Requirements to Working Software
antonarhipov
2
470
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
240
AIエージェントと協働するCLI開発 — BunとOpenClawで学んだこと
yoshikouki
1
240
柔軟なPDFレイアウトエディタを支える型システム設計 — Discriminated UnionとConditional Typeの実践
minako__ph
4
1.5k
oxlintはeslint/typescript-eslintを置き換えられるのか
shomafujita
2
320
さぁV100、メモリをお食べ・・・
nilpe
0
130
Modding RubyKaigi for Myself
yui_knk
0
900
Featured
See All Featured
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
190
Test your architecture with Archunit
thirion
1
2.3k
The SEO Collaboration Effect
kristinabergwall1
1
480
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
380
How to build a perfect <img>
jonoalderson
1
5.6k
ラッコキーワード サービス紹介資料
rakko
1
3.6M
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
RailsConf 2023
tenderlove
30
1.5k
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
200
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
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内部で処理する際の文字コード
ご清澄ありがとうございました。