SlideShare a Scribd company logo
1 of 16
Download to read offline
 † Perl Beginners #15 † 
申し訳程度にPerl OOP 
での質問をします 
ほかは謎便利ツール?紹介 
2014/10/7 
大野義貴(CL)
私 
⿟⿟大野義貴(CL) twitter @CLCLCL 
⿟⿟五反田の派遣・アポイントマッチング会社のサーバエ 
ンジニア 
⿟⿟2000年くらいから地方の印刷屋でPerlやっていた 
⿟⿟iモードコンテンツ屋さんがHTTPで206 Partial 
Contentで戦っていたころ印刷屋さんではPDFのペー 
ジ毎分割配信で206と戦っていた 
⿟⿟CPAN Author流行ってた頃ノリでCPAN Author 
⿟⿟最近転職して東京出てきた
便利ツール 
を置く場所
CentOSのrootユーザはデ 
フォルトだと/root/binに 
pathが通っているからログ 
フィルタ系の便利ツールっ 
てPerlで作ったりするけれ 
ども/root/binをmkdirし 
たりしてそこに置くといいん 
じゃないかな(サーバ引越し 
時に紛失しにくい)root作 
業の是非の判断は置いておく
便利ツール
Arduino UNIX時間時計 
Perl無しで使える→便利! 
2038年問題をいやでも意 
識する→便利! 
UNIXエポックとか知識ある 
人が周囲にいないと変な目で 
見られる→便利!
便利ツール 
その2
Raspberry Pi AnyEvent::Twitter::Streamクライアント
Raspberry Pi AnyEvent::Twitter::Streamクライアント 
ストリーミング→便利! 
TL内の秒あたりツイート数表 
示→勢いが見られて便利! 
ふぁぼられたりメンション来 
ると色が変わる→便利! 
VoiceText読み上げ→便利!
今回はこのハードの 
Perlプログラムで 
質問が有り〼ハード 
あまり関係無いが
from Adafruit_I2C import Adafruit_I2C 
from time import sleep 
class Adafruit_CharLCDPlate(Adafruit_I2C): 
# --------------------------------------------- 
# Constructor 
def __init__(self, busnum=-1, 
addr=0x20, debug=False): 
self.i2c = Adafruit_I2C(addr, busnum, debug) 
[snip] 
self.displayshift = (self.LCD_CURSORMOVE | self.LCD_MOVERIGHT) 
self.displaymode = (self.LCD_ENTRYLEFT | self.LCD_ENTRYSHIFTDECREMENT) 
self.displaycontrol = (self.LCD_DISPLAYON|self.LCD_CURSOROFF|self.LCD_BLINKOFF) 
self.write(0x33) # Init 
self.write(0x32) # Init 
self.write(0x28) # 2 line 5x8 matrix 
self.write(self.LCD_CLEARDISPLAY) 
self.write(self.LCD_CURSORSHIFT|self.displayshift) 
self.write(self.LCD_ENTRYMODESET 
| self.displaymode) 
self.write(self.LCD_DISPLAYCONTROL 
| self.displaycontrol) 
self.write(self.LCD_RETURNHOME) 
# --------------------------------------------- 
# Write operations 
def write(self, value, char_mode=False): 
""" Send command/data to LCD """ 
[snip] 
液晶モジュール 
表示用プログラ 
ム:オリジナル 
はPython 
オブジェクトの 
コンストラクタ 
(初期化)部分 
で、メンバ関数 
を呼んでいる
package Adafruit_CharLCDPlate; 
use HiPi::Device::I2C; use HiPi::BCM2835::I2C; 
# ------------------------------------------------------ 
# Constructor 
sub new { 
my $class = shift; my %args = ( @_ ); my $self = {}; 
$self->{addr}= 0x20; 
$self->{i2c} = HiPi::Device::I2C 
->new(address => $self->{addr}); 
$self->{i2c}->smbus_write_byte_data(MCP23017_IOCON_BANK0, 0b10100000); 
$self->{displayshift} = (LCD_CURSORMOVE|LCD_MOVERIGHT); 
$self->{displaymode} = (LCD_ENTRYLEFT |LCD_ENTRYSHIFTDECREMENT); 
$self->{displaycontrol} = (LCD_DISPLAYON |LCD_CURSOROFF|LCD_BLINKOFF); 
return bless $self, $class; 
} 
# Constructor_2 
sub init { 
my $self = shift; 
$self->write(0x33); # Init 
$self->write(0x32); # Init 
$self->write(0x28); # 2 line 5x8 matrix 
$self->write(LCD_CLEARDISPLAY); 
$self->write(LCD_CURSORSHIFT |$self->{displayshift}); 
$self->write(LCD_ENTRYMODESET|$self->{displaymode}); 
$self->write(LCD_DISPLAYCONTROL|$self->{displaycontrol}); 
$self->write(LCD_RETURNHOME); 
} 
# ------------------------------------------------------ 
# Write operations 
sub write { 
my $self = shift; 
[snip] 
} 
液晶モジュール表示 
ライブラリを、 
Pythonから 
Perlにオレオレ移植 
オブジェクトのコン 
ストラクタ(初期化) 
部分でメンバ関数を 
呼べないので、オブ 
ジェクト生成後、 
$obj->init() 
を別口で呼ぶことで 
メンバ関数を利用
質問の 
まとめ
PerlのOOPにおいて、コンストラクタ 
内でメンバ関数を呼ぶ方法はないか? 
質問 
my $obj = HOGE->new(); 
$obj->write('done.'); 
exit; 
package HOGE; 
sub new { # Constructor 
my $class = shift; 
my $self = {}; 
$self->write('init...'); # ERROR!! 
return bless $self, $class; 
} 
sub write { # Member function 
my $self = shift; 
my $str = shift; 
print "$strn"; 
}
blessを変数に入れておいて、後で変数を 
returnする 
解決 
my $obj = HOGE->new(); 
$obj->write('done.'); 
exit; 
package HOGE; 
sub new { # Constructor 
my $class = shift; 
my $self = {}; 
my $obj = bless $self, $class; 
$self->write('init...'); #PASS! 
return $obj; 
} 
sub write { # Member function 
my $self = shift; 
my $str = shift; 
print "$strn"; 
}

More Related Content

What's hot

Interactive Music II SuperCollider入門 2 - 関数とUGen
Interactive Music II SuperCollider入門 2 - 関数とUGenInteractive Music II SuperCollider入門 2 - 関数とUGen
Interactive Music II SuperCollider入門 2 - 関数とUGenAtsushi Tadokoro
 
役に立ちそうだけど、やっぱり役に立たなそうな技術Quine
役に立ちそうだけど、やっぱり役に立たなそうな技術Quine役に立ちそうだけど、やっぱり役に立たなそうな技術Quine
役に立ちそうだけど、やっぱり役に立たなそうな技術QuineKatsuyaENDOH
 
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)Atsushi Tadokoro
 
Immortal
ImmortalImmortal
Immortaldo_aki
 
入門 超絶技巧プログラミング !
入門 超絶技巧プログラミング !入門 超絶技巧プログラミング !
入門 超絶技巧プログラミング !Nobutada Matsubara
 
Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005gotohayato
 
道具を磨き続ける
道具を磨き続ける道具を磨き続ける
道具を磨き続けるTakuya Fujimura
 

What's hot (7)

Interactive Music II SuperCollider入門 2 - 関数とUGen
Interactive Music II SuperCollider入門 2 - 関数とUGenInteractive Music II SuperCollider入門 2 - 関数とUGen
Interactive Music II SuperCollider入門 2 - 関数とUGen
 
役に立ちそうだけど、やっぱり役に立たなそうな技術Quine
役に立ちそうだけど、やっぱり役に立たなそうな技術Quine役に立ちそうだけど、やっぱり役に立たなそうな技術Quine
役に立ちそうだけど、やっぱり役に立たなそうな技術Quine
 
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)
 
Immortal
ImmortalImmortal
Immortal
 
入門 超絶技巧プログラミング !
入門 超絶技巧プログラミング !入門 超絶技巧プログラミング !
入門 超絶技巧プログラミング !
 
Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005
 
道具を磨き続ける
道具を磨き続ける道具を磨き続ける
道具を磨き続ける
 

Similar to PerlのOOPにおいて、コンストラクタ 内でメンバ関数を呼ぶ方法は?(Perl Beginners #15)

DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519Yasuhiro Ishii
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)Hiroaki KOBAYASHI
 
【入門】Arduino勉強会
【入門】Arduino勉強会【入門】Arduino勉強会
【入門】Arduino勉強会Masashi_Brilliant
 
今すぐ始めるArduino
今すぐ始めるArduino今すぐ始めるArduino
今すぐ始めるArduinofuna3
 
ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳Shinichiro Niiyama
 
iReport Designerで幸せになりましょう
iReport Designerで幸せになりましょうiReport Designerで幸せになりましょう
iReport Designerで幸せになりましょう雄介 荒川
 
OpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワークOpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワークM Hagiwara
 
HaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミングHaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミングKiwamu Okabe
 
Androidとfpgaを高速fifo通信させちゃう
Androidとfpgaを高速fifo通信させちゃうAndroidとfpgaを高速fifo通信させちゃう
Androidとfpgaを高速fifo通信させちゃうksk sue
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0Kiwamu Okabe
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesTakeshi Komiya
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPUTakuro Iizuka
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia鉄次 尾形
 
CUDAを利用したPIV解析の高速化
CUDAを利用したPIV解析の高速化CUDAを利用したPIV解析の高速化
CUDAを利用したPIV解析の高速化翔新 史
 
OSC Tokyo 2013 Spring JRPUG
OSC Tokyo 2013 Spring JRPUGOSC Tokyo 2013 Spring JRPUG
OSC Tokyo 2013 Spring JRPUGHideki Aoshima
 
自作RISC-VチップでLチカをやってみた
自作RISC-VチップでLチカをやってみた自作RISC-VチップでLチカをやってみた
自作RISC-VチップでLチカをやってみたJunichi Akita
 
Scripting Layer for Android + Perl
Scripting Layer for Android + PerlScripting Layer for Android + Perl
Scripting Layer for Android + PerlNaoya Ito
 
StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件yaegashi
 
Web技術勉強会 第37回
Web技術勉強会 第37回Web技術勉強会 第37回
Web技術勉強会 第37回龍一 田中
 
PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話侑弥 濱田
 

Similar to PerlのOOPにおいて、コンストラクタ 内でメンバ関数を呼ぶ方法は?(Perl Beginners #15) (20)

DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 
【入門】Arduino勉強会
【入門】Arduino勉強会【入門】Arduino勉強会
【入門】Arduino勉強会
 
今すぐ始めるArduino
今すぐ始めるArduino今すぐ始めるArduino
今すぐ始めるArduino
 
ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳
 
iReport Designerで幸せになりましょう
iReport Designerで幸せになりましょうiReport Designerで幸せになりましょう
iReport Designerで幸せになりましょう
 
OpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワークOpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワーク
 
HaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミングHaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミング
 
Androidとfpgaを高速fifo通信させちゃう
Androidとfpgaを高速fifo通信させちゃうAndroidとfpgaを高速fifo通信させちゃう
Androidとfpgaを高速fifo通信させちゃう
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia
 
CUDAを利用したPIV解析の高速化
CUDAを利用したPIV解析の高速化CUDAを利用したPIV解析の高速化
CUDAを利用したPIV解析の高速化
 
OSC Tokyo 2013 Spring JRPUG
OSC Tokyo 2013 Spring JRPUGOSC Tokyo 2013 Spring JRPUG
OSC Tokyo 2013 Spring JRPUG
 
自作RISC-VチップでLチカをやってみた
自作RISC-VチップでLチカをやってみた自作RISC-VチップでLチカをやってみた
自作RISC-VチップでLチカをやってみた
 
Scripting Layer for Android + Perl
Scripting Layer for Android + PerlScripting Layer for Android + Perl
Scripting Layer for Android + Perl
 
StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件
 
Web技術勉強会 第37回
Web技術勉強会 第37回Web技術勉強会 第37回
Web技術勉強会 第37回
 
PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話
 

Recently uploaded

リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドKen Fukui
 
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドKen Fukui
 
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドKen Fukui
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptyuitoakatsukijp
 
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドリアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドKen Fukui
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024koheioishi1
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ssusere0a682
 
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドリアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドKen Fukui
 
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfTEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfyukisuga3
 

Recently uploaded (10)

リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
 
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
 
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScript
 
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドリアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
 
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドリアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
 
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfTEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdf
 

PerlのOOPにおいて、コンストラクタ 内でメンバ関数を呼ぶ方法は?(Perl Beginners #15)

  • 1.  † Perl Beginners #15 † 申し訳程度にPerl OOP での質問をします ほかは謎便利ツール?紹介 2014/10/7 大野義貴(CL)
  • 2. 私 ⿟⿟大野義貴(CL) twitter @CLCLCL ⿟⿟五反田の派遣・アポイントマッチング会社のサーバエ ンジニア ⿟⿟2000年くらいから地方の印刷屋でPerlやっていた ⿟⿟iモードコンテンツ屋さんがHTTPで206 Partial Contentで戦っていたころ印刷屋さんではPDFのペー ジ毎分割配信で206と戦っていた ⿟⿟CPAN Author流行ってた頃ノリでCPAN Author ⿟⿟最近転職して東京出てきた
  • 4. CentOSのrootユーザはデ フォルトだと/root/binに pathが通っているからログ フィルタ系の便利ツールっ てPerlで作ったりするけれ ども/root/binをmkdirし たりしてそこに置くといいん じゃないかな(サーバ引越し 時に紛失しにくい)root作 業の是非の判断は置いておく
  • 6. Arduino UNIX時間時計 Perl無しで使える→便利! 2038年問題をいやでも意 識する→便利! UNIXエポックとか知識ある 人が周囲にいないと変な目で 見られる→便利!
  • 9. Raspberry Pi AnyEvent::Twitter::Streamクライアント ストリーミング→便利! TL内の秒あたりツイート数表 示→勢いが見られて便利! ふぁぼられたりメンション来 ると色が変わる→便利! VoiceText読み上げ→便利!
  • 11. from Adafruit_I2C import Adafruit_I2C from time import sleep class Adafruit_CharLCDPlate(Adafruit_I2C): # --------------------------------------------- # Constructor def __init__(self, busnum=-1, addr=0x20, debug=False): self.i2c = Adafruit_I2C(addr, busnum, debug) [snip] self.displayshift = (self.LCD_CURSORMOVE | self.LCD_MOVERIGHT) self.displaymode = (self.LCD_ENTRYLEFT | self.LCD_ENTRYSHIFTDECREMENT) self.displaycontrol = (self.LCD_DISPLAYON|self.LCD_CURSOROFF|self.LCD_BLINKOFF) self.write(0x33) # Init self.write(0x32) # Init self.write(0x28) # 2 line 5x8 matrix self.write(self.LCD_CLEARDISPLAY) self.write(self.LCD_CURSORSHIFT|self.displayshift) self.write(self.LCD_ENTRYMODESET | self.displaymode) self.write(self.LCD_DISPLAYCONTROL | self.displaycontrol) self.write(self.LCD_RETURNHOME) # --------------------------------------------- # Write operations def write(self, value, char_mode=False): """ Send command/data to LCD """ [snip] 液晶モジュール 表示用プログラ ム:オリジナル はPython オブジェクトの コンストラクタ (初期化)部分 で、メンバ関数 を呼んでいる
  • 12. package Adafruit_CharLCDPlate; use HiPi::Device::I2C; use HiPi::BCM2835::I2C; # ------------------------------------------------------ # Constructor sub new { my $class = shift; my %args = ( @_ ); my $self = {}; $self->{addr}= 0x20; $self->{i2c} = HiPi::Device::I2C ->new(address => $self->{addr}); $self->{i2c}->smbus_write_byte_data(MCP23017_IOCON_BANK0, 0b10100000); $self->{displayshift} = (LCD_CURSORMOVE|LCD_MOVERIGHT); $self->{displaymode} = (LCD_ENTRYLEFT |LCD_ENTRYSHIFTDECREMENT); $self->{displaycontrol} = (LCD_DISPLAYON |LCD_CURSOROFF|LCD_BLINKOFF); return bless $self, $class; } # Constructor_2 sub init { my $self = shift; $self->write(0x33); # Init $self->write(0x32); # Init $self->write(0x28); # 2 line 5x8 matrix $self->write(LCD_CLEARDISPLAY); $self->write(LCD_CURSORSHIFT |$self->{displayshift}); $self->write(LCD_ENTRYMODESET|$self->{displaymode}); $self->write(LCD_DISPLAYCONTROL|$self->{displaycontrol}); $self->write(LCD_RETURNHOME); } # ------------------------------------------------------ # Write operations sub write { my $self = shift; [snip] } 液晶モジュール表示 ライブラリを、 Pythonから Perlにオレオレ移植 オブジェクトのコン ストラクタ(初期化) 部分でメンバ関数を 呼べないので、オブ ジェクト生成後、 $obj->init() を別口で呼ぶことで メンバ関数を利用
  • 14. PerlのOOPにおいて、コンストラクタ 内でメンバ関数を呼ぶ方法はないか? 質問 my $obj = HOGE->new(); $obj->write('done.'); exit; package HOGE; sub new { # Constructor my $class = shift; my $self = {}; $self->write('init...'); # ERROR!! return bless $self, $class; } sub write { # Member function my $self = shift; my $str = shift; print "$strn"; }
  • 15.
  • 16. blessを変数に入れておいて、後で変数を returnする 解決 my $obj = HOGE->new(); $obj->write('done.'); exit; package HOGE; sub new { # Constructor my $class = shift; my $self = {}; my $obj = bless $self, $class; $self->write('init...'); #PASS! return $obj; } sub write { # Member function my $self = shift; my $str = shift; print "$strn"; }