CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板: http://kohada.2ch.net/php/)
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
荒らしはスルー推奨。
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、
Perlの奥深さについて皆で語り合い、追求してまいりましょう。
www.perl.org/get.html
Download Latest Stable Source (5.18.2)
▼前スレ
Perlについての質問箱 61箱目
http://toro.2ch.net/test/read.cgi/tech/1381561905/
Perlについての質問箱 62箱目
http://toro.2ch.net/test/read.cgi/tech/1385039352/
探検
Perlについての質問箱 63箱目
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2014/02/19(水) 23:36:23.29422デフォルトの名無しさん
2016/08/24(水) 20:59:49.53ID:jqqoh+mK これは知ってるかい?→ <*>
423デフォルトの名無しさん
2016/08/24(水) 23:20:14.12ID:hHpNATWD424デフォルトの名無しさん
2016/08/24(水) 23:31:21.73ID:jqqoh+mK425デフォルトの名無しさん
2016/08/29(月) 17:11:38.79ID:x3G6j3++ どうでもいいけど特殊な環境じゃなくてwindows標準の仕様かと
426デフォルトの名無しさん
2016/08/29(月) 21:33:30.70ID:NQxKIK4Q 文字化けが問題なんだろうね
427デフォルトの名無しさん
2016/08/29(月) 21:40:22.45ID:x3G6j3++ なぜ化けるのか、と言う話だ
CP932とunicodeが混在してる場合はどうすりゃいいですかって話じゃね
CP932とunicodeが混在してる場合はどうすりゃいいですかって話じゃね
428デフォルトの名無しさん
2016/09/01(木) 19:27:50.30ID:vCLh7LOG ココ参考にして ttp://hirobanex.net/article/2015/03/1425807814
こういう呼び出ししても
$teng->sql_builder->load_plugin('InsertOnDuplicate');
$teng->sql_builder->insert_on_duplicate(略)
Can't locate object method "insert_on_duplicate" via package "Teng::QueryBuilder"
で呼べないんだけどどうしたらいい?
こういう呼び出ししても
$teng->sql_builder->load_plugin('InsertOnDuplicate');
$teng->sql_builder->insert_on_duplicate(略)
Can't locate object method "insert_on_duplicate" via package "Teng::QueryBuilder"
で呼べないんだけどどうしたらいい?
429デフォルトの名無しさん
2016/09/01(木) 19:29:20.37ID:vCLh7LOG ちなみに
__PACKAGE__->load_plugin('+SQL::Maker::Plugin::InsertOnDuplicate');
でもダメ
__PACKAGE__->load_plugin('+SQL::Maker::Plugin::InsertOnDuplicate');
でもダメ
430デフォルトの名無しさん
2016/09/01(木) 20:39:24.43ID:0j1lNnbm ブログ記事じゃなくてPOD読めよ
431デフォルトの名無しさん
2016/09/01(木) 22:35:57.18ID:vCLh7LOG PODに別パッケージから plugin生やす方法なんて書いてないでしょ
432デフォルトの名無しさん
2016/09/03(土) 20:53:36.76ID:pSsdJ5JF マジレスするなら、
別の方法で呼べるか試してみる
何が起こっているのか調べてみる
ってところか。
別の方法で呼べるか試してみる
何が起こっているのか調べてみる
ってところか。
433デフォルトの名無しさん
2016/09/09(金) 12:53:46.35ID:JRjUoSNq 何を調べたらいいのかわからんので手が付かない
434デフォルトの名無しさん
2016/09/09(金) 13:05:29.57ID:JRjUoSNq はっきりしてるのはhirobanexのとおりに書いてもエラーで動かない事
それも $teng->->execute なんていうタイポレベルの話じゃなく
根本的にどこか間違ってるけど、どこだかわからんということ
$teng->sql_builder ってSQL::Makerを継承した状態でnewされてるんじゃないの?
Teng::QueryBuilder = SQL::Maker だから
これで動くんじゃないの?
$teng->sql_builder->load_plugin('InsertOnDuplicate');
$teng->sql_builder->insert_on_duplicate(略)
それも $teng->->execute なんていうタイポレベルの話じゃなく
根本的にどこか間違ってるけど、どこだかわからんということ
$teng->sql_builder ってSQL::Makerを継承した状態でnewされてるんじゃないの?
Teng::QueryBuilder = SQL::Maker だから
これで動くんじゃないの?
$teng->sql_builder->load_plugin('InsertOnDuplicate');
$teng->sql_builder->insert_on_duplicate(略)
435デフォルトの名無しさん
2016/09/09(金) 16:12:29.13ID:yxgmGddx もう直接コード読めよ
436デフォルトの名無しさん
2016/09/09(金) 16:58:05.37ID:yxgmGddx $teng->sql_builderでTeng::QueryBuilderのオブジェクトが帰ってくる
これはほぼSQL::Makerを継承しただけなのでSQL::Maker::load_pluginを読むとどうやらクラスメソッドとして書かれている
実際SQL::MakerのPODにも継承したクラスでクラスメソッドとして呼び出す例が書かれている
つまり $teng->sql_builder->load_plugin('foo') という書き方はオブジェクトから呼び出してるので間違い(おそらくTeng::QueryBuilder=HASH(0x000000)みたいなところに生えてる)
Teng::QueryBuilder->load_plugin('foo') とするか ref($teng->sql_builder)->load_plugin('foo') とするか
もしくはブログの例にもある通り独自のQueryBuilderクラスを用意するか
>>429
この__PACKAGE__はどこに書いたんや?__PACKAGE__の意味わかってる?
これはほぼSQL::Makerを継承しただけなのでSQL::Maker::load_pluginを読むとどうやらクラスメソッドとして書かれている
実際SQL::MakerのPODにも継承したクラスでクラスメソッドとして呼び出す例が書かれている
つまり $teng->sql_builder->load_plugin('foo') という書き方はオブジェクトから呼び出してるので間違い(おそらくTeng::QueryBuilder=HASH(0x000000)みたいなところに生えてる)
Teng::QueryBuilder->load_plugin('foo') とするか ref($teng->sql_builder)->load_plugin('foo') とするか
もしくはブログの例にもある通り独自のQueryBuilderクラスを用意するか
>>429
この__PACKAGE__はどこに書いたんや?__PACKAGE__の意味わかってる?
437デフォルトの名無しさん
2016/09/09(金) 17:40:55.04ID:iPoh5J1m もう、馬鹿過ぎて哀れだ。実際にやりたいことは
*SQL::Maker::insert_on_duplicate = \&SQL::Maker::Plugin::InsertOnDuplicate::insert_on_duplicate;
ってことでしょ? もうこれでいいでしょ。POD すら読まないんじゃ助けようがないよ。
*SQL::Maker::insert_on_duplicate = \&SQL::Maker::Plugin::InsertOnDuplicate::insert_on_duplicate;
ってことでしょ? もうこれでいいでしょ。POD すら読まないんじゃ助けようがないよ。
438437
2016/09/10(土) 11:47:34.76ID:VYsCJTGt ごめん、言い過ぎた。とりあえず、正解が分らない段階で俺ならどうするかを書くよ。
まず、何をしているのかを POD で確認する。
POD では load_plugin についてはクラスメソッドとして使う例だけが書かれている。
ここで「おかしい」と思わなければならない。
オブジェクトメソッドとして使えないとは書かれていないのでソースコードを読む。
%INC を見ればソースコードの場所は分かる。
load_plugin は予想以上にシンプルだった。これで解決。
解決しなかった場合。
まず、SQL::Maker::Plugin::InsertOnDuplicate を明示的に use する。それで間違いなく呼べる。
SQL::Maker::Plugin::InsertOnDuplicate::insert_on_duplicate( $teng->sql_builder)
あるいは
$teng->sql_builder->SQL::Maker::Plugin::InsertOnDuplicate::insert_on_duplicate
好きな方でいい。これでうまくいくなら load_plugin で何かが間違っている。
デバッガを使うか、load_plugin を差し替えて動作を詳しく調べる。
まず、何をしているのかを POD で確認する。
POD では load_plugin についてはクラスメソッドとして使う例だけが書かれている。
ここで「おかしい」と思わなければならない。
オブジェクトメソッドとして使えないとは書かれていないのでソースコードを読む。
%INC を見ればソースコードの場所は分かる。
load_plugin は予想以上にシンプルだった。これで解決。
解決しなかった場合。
まず、SQL::Maker::Plugin::InsertOnDuplicate を明示的に use する。それで間違いなく呼べる。
SQL::Maker::Plugin::InsertOnDuplicate::insert_on_duplicate( $teng->sql_builder)
あるいは
$teng->sql_builder->SQL::Maker::Plugin::InsertOnDuplicate::insert_on_duplicate
好きな方でいい。これでうまくいくなら load_plugin で何かが間違っている。
デバッガを使うか、load_plugin を差し替えて動作を詳しく調べる。
439デフォルトの名無しさん
2016/09/10(土) 18:20:16.29ID:1M4Sozo+ Tengを使うのかどうか自分で選べるのなら、自分が理解していないものを使わないという選択肢がある。
他の人が選んでしかも使わなければならないという状況なら、選んだ人にどう使うのかを聞くといい。
他の人が選んでしかも使わなければならないという状況なら、選んだ人にどう使うのかを聞くといい。
440デフォルトの名無しさん
2016/09/10(土) 19:19:33.59ID:7Wlp4jMr 多分ブログ書いた人やその人に教えた人はTeng本体と混ざって勘違いしたんだろうな
Teng自体はインスタンスからもロードできるから
Teng自体はインスタンスからもロードできるから
441デフォルトの名無しさん
2016/09/13(火) 17:44:13.57ID:AYCTTYgO この記事、オレオレメモだって自分で書いてるからわざわざつっこむのも野暮だけどOR検索の例もちょっとひどい。
どうしてこうなった?
どうしてこうなった?
442デフォルトの名無しさん
2016/09/22(木) 14:09:25.16ID:ULuG4eTB Windows の Strawberry Perl で、「Parallel::ForkManager」は使えますか?
----------------------------------------
use LWP::Simple;
use Parallel::ForkManager;
...
@links=(
["http://www.foo.bar/rulez.data","rulez_data.txt"],
["http://new.host/more_data.doc","more_data.doc"],
...
);
...
# 最大30プロセスで並列的にダウンロードを行います
my $pm = new Parallel::ForkManager(30);
foreach my $linkarray (@links) {
$pm->start and next; # forkさせます
my ($link,$fn) = @$linkarray;
warn "Cannot get $fn from $link"
if getstore($link,$fn) != RC_OK;
$pm->finish; # 子プロセスをexitします
}
$pm->wait_all_children;
----------------------------------------
の様なスクリプトで、数万ファイルをダウンロードしようとすると、
child process '-*****' disappeared.
A call to `waitpid` outside of Parallel::ForkManager might have reaped it.
のエラーを出しながら、メモリを全消費・開放を何度か繰り返した後に、
最終的には、「Out of memory!」で異常終了します。
Cygwin の Perl では、「Cannot get $fn from $link」エラーを出しまくりますが、
メモリを全消費する事はありません(異常終了もしません)。
----------------------------------------
use LWP::Simple;
use Parallel::ForkManager;
...
@links=(
["http://www.foo.bar/rulez.data","rulez_data.txt"],
["http://new.host/more_data.doc","more_data.doc"],
...
);
...
# 最大30プロセスで並列的にダウンロードを行います
my $pm = new Parallel::ForkManager(30);
foreach my $linkarray (@links) {
$pm->start and next; # forkさせます
my ($link,$fn) = @$linkarray;
warn "Cannot get $fn from $link"
if getstore($link,$fn) != RC_OK;
$pm->finish; # 子プロセスをexitします
}
$pm->wait_all_children;
----------------------------------------
の様なスクリプトで、数万ファイルをダウンロードしようとすると、
child process '-*****' disappeared.
A call to `waitpid` outside of Parallel::ForkManager might have reaped it.
のエラーを出しながら、メモリを全消費・開放を何度か繰り返した後に、
最終的には、「Out of memory!」で異常終了します。
Cygwin の Perl では、「Cannot get $fn from $link」エラーを出しまくりますが、
メモリを全消費する事はありません(異常終了もしません)。
443デフォルトの名無しさん
2016/09/22(木) 15:02:46.45ID:EZPik98J windowsのForkは、表面上は同じように動作する仕様になっているが、
実際にプロセスやスレッド、CPUの動作が期待通りになってるかと言うとそれは違う。
ほとんどの場合が、unixとの互換性を保つための見せかけ。
実際にプロセスやスレッド、CPUの動作が期待通りになってるかと言うとそれは違う。
ほとんどの場合が、unixとの互換性を保つための見せかけ。
444デフォルトの名無しさん
2016/09/22(木) 16:23:36.65ID:PQbGo3UU rulezの綴りがzの辺り、悪さしてそうだな
445デフォルトの名無しさん
2016/09/23(金) 01:08:30.38ID:Ay1vA5a9 if($hoge=~/(\d+)$hoge3$/){$hoge2=$1}
これの意味は
$hoge3が数字のみなら$hogeに代入し、$hoge2にも代入するという意味でしょうか?
これの意味は
$hoge3が数字のみなら$hogeに代入し、$hoge2にも代入するという意味でしょうか?
446442
2016/09/23(金) 05:21:37.52ID:CNgCRT2E >>443
「WindowsのFork」の意味は分かりませんが(Windows用PerlのFork?)、
Cygwin の perl は、
C:\cygwin64\bin\bash --login -i -c "perl ...
等としなくても、Windows から直接起動出来るので、
あのスプリクトで直接起動しても、メモリエラーは出ませんでした。
Cygwin の perl を、Strawberry Perl の代わりに、、、と思ったら、
いきなり chomp が、CR+LF を削除してくれなかった。
>>444
perldoc.jp からのコピペです。
>>445
if ( 文字列 =~ /パターン/ )
もし「文字列」の中に「パターン」が含まれていれば、
if ( $hoge =~ /(\d+)$hoge3$/ ) { $hoge2 = $1 }
もし「 $hoge 」の中に「 \d+$hoge3$ 」が含まれていれば、「 $hoge2 」に「 \d+ 」を代入
「WindowsのFork」の意味は分かりませんが(Windows用PerlのFork?)、
Cygwin の perl は、
C:\cygwin64\bin\bash --login -i -c "perl ...
等としなくても、Windows から直接起動出来るので、
あのスプリクトで直接起動しても、メモリエラーは出ませんでした。
Cygwin の perl を、Strawberry Perl の代わりに、、、と思ったら、
いきなり chomp が、CR+LF を削除してくれなかった。
>>444
perldoc.jp からのコピペです。
>>445
if ( 文字列 =~ /パターン/ )
もし「文字列」の中に「パターン」が含まれていれば、
if ( $hoge =~ /(\d+)$hoge3$/ ) { $hoge2 = $1 }
もし「 $hoge 」の中に「 \d+$hoge3$ 」が含まれていれば、「 $hoge2 」に「 \d+ 」を代入
448デフォルトの名無しさん
2016/09/23(金) 14:09:14.63ID:eBfGtRhY 普段それを読む文化にない人がいきなり読めたら逆にすごいと思う
PerlってPerlが分かる人だけの言語
PerlってPerlが分かる人だけの言語
449デフォルトの名無しさん
2016/09/26(月) 17:38:36.14ID:ak8zLIw0 Perl on Bash on Ubuntu on Windows10 での、
モジュールのインストールで、無駄に苦労した。
解決法: Config.pm の修正
Windows10 のコマンドプロンプトでも、
エスケープシーケンスが使えるらしい。
PROMPT $E[96m$T$E[3D $E[93m$P$G$E[37m$E[1C
懐かし
モジュールのインストールで、無駄に苦労した。
解決法: Config.pm の修正
Windows10 のコマンドプロンプトでも、
エスケープシーケンスが使えるらしい。
PROMPT $E[96m$T$E[3D $E[93m$P$G$E[37m$E[1C
懐かし
450デフォルトの名無しさん
2016/09/28(水) 02:39:45.69ID:sK8+jqCL ソースはサンプルコードな
451デフォルトの名無しさん
2016/10/03(月) 14:01:12.25ID:OUfpKV3+ C:\> prompt $e[1;36m[$d$s$t$h$h$h] $e[1;33m%USERNAME%@%COMPUTERNAME% $e[37m$p$_$g$s
452デフォルトの名無しさん
2016/10/03(月) 19:32:24.04ID:tI+B9pP0 ザメフォン元気?
453デフォルトの名無しさん
2016/10/06(木) 18:37:40.82ID:fMpg74pi ビット演算を多用したいんだけど、変数のサイズを指定したい。longとか。
とりあえず、16bitと32bitと64bitの整数が欲しい。
あと数値と文字が勝手に切り替わらないようにしたい。
ビット演算してるブロックだけでいいんで。
あと環境の保証も欲しい。どのマシンでどのbitのPerlとか関係なく。
俺が32bitのビット演算って言えばそれはもう絶対32nit演算。
もちろん不当に遅くなる方法は許さない。
とりあえず、16bitと32bitと64bitの整数が欲しい。
あと数値と文字が勝手に切り替わらないようにしたい。
ビット演算してるブロックだけでいいんで。
あと環境の保証も欲しい。どのマシンでどのbitのPerlとか関係なく。
俺が32bitのビット演算って言えばそれはもう絶対32nit演算。
もちろん不当に遅くなる方法は許さない。
454デフォルトの名無しさん
2016/10/06(木) 20:14:48.16ID:rUXrZJG3 C で書け。
455デフォルトの名無しさん
2016/10/06(木) 20:56:23.24ID:Wdgc44Vq C++でもいいぞ
456デフォルトの名無しさん
2016/10/06(木) 21:07:21.59ID:ZdOAOk1u rubyで十分
457デフォルトの名無しさん
2016/10/06(木) 21:31:39.42ID:fMpg74pi Cとかでもいいけどdllの使い方分からないのだ
458デフォルトの名無しさん
2016/10/07(金) 03:14:09.37ID:hiGL0oI+459デフォルトの名無しさん
2016/10/07(金) 07:25:20.66ID:codMUtxm vec かな。それでも不満なら perlfaq3 を読んで C で書け。
460デフォルトの名無しさん
2016/10/07(金) 12:43:21.52ID:codMUtxm 実際に何をして、その結果何が問題だったの? そのくらいは書いてくれないと……
461デフォルトの名無しさん
2016/10/08(土) 01:08:43.11ID:hitB9rm0 >>457
xsと言うのがあるが、一時的に値が複製されて良いなら標準入出力(メモリ渡し)のほうが絶対に楽だと思うのだ。
ま、perl使ってるなら複製されたメモリのほうが元のデータより圧倒的に小さいはずだが
xsと言うのがあるが、一時的に値が複製されて良いなら標準入出力(メモリ渡し)のほうが絶対に楽だと思うのだ。
ま、perl使ってるなら複製されたメモリのほうが元のデータより圧倒的に小さいはずだが
462デフォルトの名無しさん
2016/10/08(土) 09:19:23.51ID:ZgFPdp2t ビット演算したいなら普通にすればいいよ。
◯ビット変数がほしいといわれても、それは適切にマスクすればいいだけだし。
◯ビット変数のように振る舞うものがほしいということなら、Perl は C よりも期待に応えられると思うよ。
まずは C と同じ書き方をして速度を計ってみてよ。話はそれからだ。
◯ビット変数がほしいといわれても、それは適切にマスクすればいいだけだし。
◯ビット変数のように振る舞うものがほしいということなら、Perl は C よりも期待に応えられると思うよ。
まずは C と同じ書き方をして速度を計ってみてよ。話はそれからだ。
463デフォルトの名無しさん
2016/10/08(土) 22:30:15.59ID:KfBpvv2w はぁ?
~0 この時点で同じになりませんがな
~0 この時点で同じになりませんがな
464デフォルトの名無しさん
2016/10/09(日) 00:00:21.79ID:ja1MeL+I >>453 に言ってるんだよ?
465デフォルトの名無しさん
2016/10/10(月) 16:43:42.37ID:zhEtfxQ/ もう連休終わっちゃうんだけど結局何をしたかったのかな。
466デフォルトの名無しさん
2016/10/11(火) 00:06:06.59ID:SYi+Wrc4 その日のうちに解決したんじゃね?
木曜日の相手になに言ってんだか
木曜日の相手になに言ってんだか
467デフォルトの名無しさん
2016/10/11(火) 00:28:33.80ID:SYi+Wrc4 しかし普通の言語やったあとにPerlやると異常なほど即座に短く書き終えるからなにか書き忘れてるんじゃないかと不安になる。
正しく動くと分かると異常なほど楽で嬉しくなるし、C++とかが馬鹿らしくなる。
そして実行速度計ると結局全部納得してため息。
正しく動くと分かると異常なほど楽で嬉しくなるし、C++とかが馬鹿らしくなる。
そして実行速度計ると結局全部納得してため息。
468デフォルトの名無しさん
2016/10/11(火) 19:01:16.50ID:A+TNY00d stat($file_path);でファイルを作成したtimeは
atime,mtime,ctimeのどれなの?
atime,mtime,ctimeのどれなの?
469デフォルトの名無しさん
2016/10/11(火) 19:50:08.12ID:Mt8tOIIr >>468
http://perldoc.jp/func/stat
> 8 atime 紀元から、最後にアクセスされた時刻までの秒数
> 9 mtime 紀元から、最後に修正(modify)された時刻までの秒数
> 10 ctime 紀元から、inode 変更(change)された時刻までの秒数 (*)
> 明らかに、ctime のフィールドは移植性がありません。
> 特に、これから「作成時刻」を想定することは出来ません
http://perldoc.jp/docs/perl/perlport.pod#Files32and32Filesystems
> ファイルシステムはアクセスタイムスタンプや変更タイムスタンプに
> 対応していないかもしれません (つまり移植性のあるタイムスタンプは
> 変更タイムスタンプだけです); またタイムスタンプは 1 秒単位では
> ないかもしれません (例えば、FAT ファイルシステムは時刻の単位は
> 2 秒単位です)。
>「inode 変更タイムスタンプ」 (-C ファイルテスト) は (Unix 以外では)
> 実際には「作成タイムスタンプ」かもしれません。
http://perldoc.jp/func/stat
> 8 atime 紀元から、最後にアクセスされた時刻までの秒数
> 9 mtime 紀元から、最後に修正(modify)された時刻までの秒数
> 10 ctime 紀元から、inode 変更(change)された時刻までの秒数 (*)
> 明らかに、ctime のフィールドは移植性がありません。
> 特に、これから「作成時刻」を想定することは出来ません
http://perldoc.jp/docs/perl/perlport.pod#Files32and32Filesystems
> ファイルシステムはアクセスタイムスタンプや変更タイムスタンプに
> 対応していないかもしれません (つまり移植性のあるタイムスタンプは
> 変更タイムスタンプだけです); またタイムスタンプは 1 秒単位では
> ないかもしれません (例えば、FAT ファイルシステムは時刻の単位は
> 2 秒単位です)。
>「inode 変更タイムスタンプ」 (-C ファイルテスト) は (Unix 以外では)
> 実際には「作成タイムスタンプ」かもしれません。
470デフォルトの名無しさん
2016/10/12(水) 08:39:20.39ID:9k51B2Do Perlのオブジェクト指向読んだばっかりで理解が曖昧なんだけど、
これだと、オブジェクトがオブジェクトなのか関数なのかって呼び出し側で決める事にならない?
コンストラクタもメソッドも。
ついでに、インスタンスのカプセル化どうこうも、呼び出し側の権利?
みたいに見えたのですが。
これだと、オブジェクトがオブジェクトなのか関数なのかって呼び出し側で決める事にならない?
コンストラクタもメソッドも。
ついでに、インスタンスのカプセル化どうこうも、呼び出し側の権利?
みたいに見えたのですが。
471デフォルトの名無しさん
2016/10/12(水) 13:04:43.13ID:kXFNS19K472デフォルトの名無しさん
2016/10/12(水) 14:33:18.63ID:9k51B2Do >>471
ありがとう
以下みたいな感じの記述は使っても問題ない?
あと穴があった場合も教えて欲しい。
(複数回に分けて書くので途中で書けなくなるかも)
use utf8;
use strict;
use warnings;
#ただの実験
# 1: メソッドとインスタンスをカプセル化する。
# 2: クロージャを、あたかもオブジェクト指向と同じ記法で呼び出せるようにする。(クロージャとオブジェクト指向の同一視)
# 3: クロージャをクロージャのまま使いたければそうできるようにした。そもそもクロージャのほうが速いので。
ありがとう
以下みたいな感じの記述は使っても問題ない?
あと穴があった場合も教えて欲しい。
(複数回に分けて書くので途中で書けなくなるかも)
use utf8;
use strict;
use warnings;
#ただの実験
# 1: メソッドとインスタンスをカプセル化する。
# 2: クロージャを、あたかもオブジェクト指向と同じ記法で呼び出せるようにする。(クロージャとオブジェクト指向の同一視)
# 3: クロージャをクロージャのまま使いたければそうできるようにした。そもそもクロージャのほうが速いので。
473デフォルトの名無しさん
2016/10/12(水) 14:33:37.13ID:9k51B2Do {
package Class;
sub new{
my $class = $_[0] eq __PACKAGE__ ? shift : undef ; #オブジェクトとして呼び出されたかどうか
my $self = {
Name => shift,
};
my $method = {
NameGet => sub{ $self->{Name} },
NameSet => sub{ $self->{Name} = shift; },
};
return $method if(!$class); # 普通の関数(クロージャ)として呼ばれた場合
return bless $method, $class; # オブジェクトとして呼ばれた場合
}
sub AUTOLOAD {
our $AUTOLOAD;
my $method = shift;
ref($method) eq __PACKAGE__ or return("error");
my @load = split '::', $AUTOLOAD;
my $load = $load[-1];
$method->{$load}->(@_);
}
}
package Class;
sub new{
my $class = $_[0] eq __PACKAGE__ ? shift : undef ; #オブジェクトとして呼び出されたかどうか
my $self = {
Name => shift,
};
my $method = {
NameGet => sub{ $self->{Name} },
NameSet => sub{ $self->{Name} = shift; },
};
return $method if(!$class); # 普通の関数(クロージャ)として呼ばれた場合
return bless $method, $class; # オブジェクトとして呼ばれた場合
}
sub AUTOLOAD {
our $AUTOLOAD;
my $method = shift;
ref($method) eq __PACKAGE__ or return("error");
my @load = split '::', $AUTOLOAD;
my $load = $load[-1];
$method->{$load}->(@_);
}
}
474デフォルトの名無しさん
2016/10/12(水) 14:34:03.93ID:9k51B2Do {
package test;
my $c = Class::new("Closure"); #クロージャとして呼び出すと、一般的なクロージャと同じように使える。
print $c->{NameGet}->() . "\n";
my $o = Class->new("Object"); #オブジェクト指向として呼び出すと、オブジェクト指向と同じように使える。(中身はクロージャ)
print $o->NameGet() . "\n";
print Class::NameGet(); #関数のように呼ぶとエラー
}
__END__
以上です
package test;
my $c = Class::new("Closure"); #クロージャとして呼び出すと、一般的なクロージャと同じように使える。
print $c->{NameGet}->() . "\n";
my $o = Class->new("Object"); #オブジェクト指向として呼び出すと、オブジェクト指向と同じように使える。(中身はクロージャ)
print $o->NameGet() . "\n";
print Class::NameGet(); #関数のように呼ぶとエラー
}
__END__
以上です
475デフォルトの名無しさん
2016/10/12(水) 16:49:58.02ID:HdFKT2Ip オブジェクト指向=カプセル化ではないし、perl5でももう少しスマートなカプセル化のやり方もあるが筋が悪いからおすすめはしない
perl6はオブジェクト指向に関してはかなりマシだけど、そもそも速度気にするならperlは向かない
perl5じゃないとダメなら規約などで上手く付き合うしかない
ちなみにそのコードだとまともに継承できないね
perl6はオブジェクト指向に関してはかなりマシだけど、そもそも速度気にするならperlは向かない
perl5じゃないとダメなら規約などで上手く付き合うしかない
ちなみにそのコードだとまともに継承できないね
476デフォルトの名無しさん
2016/10/12(水) 21:51:13.12ID:9k51B2Do やりかたがあると言うのなら、提示して欲しいのだけど。(ただの俺は知ってるぞ自慢?)
事前に試しましたが、継承はできましたよー。
複数クラスを書くと長くなるので書きませんが、
まったく同じように別のクラスを書いて、ベースにしたいクラスを呼び出して更新すれば
とりあえずインスタンスもメソッドは継承されるですね。
あと穴は一つ発見しました。
これは後出しにしようかな。
事前に試しましたが、継承はできましたよー。
複数クラスを書くと長くなるので書きませんが、
まったく同じように別のクラスを書いて、ベースにしたいクラスを呼び出して更新すれば
とりあえずインスタンスもメソッドは継承されるですね。
あと穴は一つ発見しました。
これは後出しにしようかな。
477デフォルトの名無しさん
2016/10/13(木) 02:01:07.92ID:Zro6GxWw こいつは何しに来たんだ?
478デフォルトの名無しさん
2016/10/13(木) 10:53:38.82ID:O2Ch/Rp5 perlでpcアプリケーションって作れますか?
479デフォルトの名無しさん
2016/10/14(金) 12:30:24.58ID:om26oWOX >>478 作れます。
480デフォルトの名無しさん
2016/10/14(金) 22:56:09.64ID:GnnBnQfG スーパーコンピューターのアプリケーションしか作ったことがないのですが、
そんな私でも作れるでしょうか?
そんな私でも作れるでしょうか?
481デフォルトの名無しさん
2016/10/15(土) 02:02:31.11ID:UBpH7j9p スパコンのSIMDやMPIの方が楽だから
無理しなくていい
無理しなくていい
482デフォルトの名無しさん
2016/10/17(月) 02:26:31.41ID:WRe7I7Bu 2つのテキストファイルを比較し、一致した文字列を取り出したいんですが、教えていただけませんか
483デフォルトの名無しさん
2016/10/17(月) 03:43:08.25ID:sXplblvU 一致した文字列を穴なく完璧に厳格に定義して示して下さい。
そしてそれが出来ればプログラミングの8割は終了しています。
そしてそれが出来ればプログラミングの8割は終了しています。
484デフォルトの名無しさん
2016/10/17(月) 09:06:26.12ID:z3YwWHWS diff 系かなあ。CPAN で検索してみるといいよ。
485デフォルトの名無しさん
2016/10/17(月) 09:12:40.23ID:9EO0+SUA Perl使うまでもないような
cat fileA fileB | sort | uniq -d
cat fileA fileB | sort | uniq -d
486デフォルトの名無しさん
2016/10/17(月) 09:33:07.31ID:z3YwWHWS いやいや、一致した「行」とは言ってないから。何を望んでいるのかを確認しないと。
487デフォルトの名無しさん
2016/10/17(月) 20:34:47.85ID:Denl80JP 単語だと形態素解析が必要になるけどこいつにそんな課題出さないだろう
488デフォルトの名無しさん
2016/10/18(火) 22:42:04.03ID:kO2WqMh/ my $input = [];
CSVファイルを一行づつ配列にして多元配列にした後
for (my $i=0; $i<$#$input; $i++) {print Dumper($input->[$i]),"\n";}
で全データ出力するのですが、その後(?)関数内で同じく
for (my $i=0; $i<$#$input; $i++) {print Dumper($input->[$i]),"\n";}
とすると、1行目の内容が、$#$inputの数だけ繰り返し表示されます。
関数内でも全データを出力したいのですが、どうしたらよいでしょうか。
どなたか教えてください。よろしくお願いします。
CSVファイルを一行づつ配列にして多元配列にした後
for (my $i=0; $i<$#$input; $i++) {print Dumper($input->[$i]),"\n";}
で全データ出力するのですが、その後(?)関数内で同じく
for (my $i=0; $i<$#$input; $i++) {print Dumper($input->[$i]),"\n";}
とすると、1行目の内容が、$#$inputの数だけ繰り返し表示されます。
関数内でも全データを出力したいのですが、どうしたらよいでしょうか。
どなたか教えてください。よろしくお願いします。
489デフォルトの名無しさん
2016/10/18(火) 23:56:04.56ID:sMICGAt6 1回ずつループしながら、デバッグして、使っている変数を見れば?
変数のwatch 機能、あるだろ?
変数のwatch 機能、あるだろ?
490デフォルトの名無しさん
2016/10/19(水) 00:45:58.03ID:cfM1WNHO491490
2016/10/19(水) 00:48:54.12ID:cfM1WNHO watch機能はないのですが、添字の$iを具体的な数字を入れてはprintで確認して
1行目のデータになっていると気づいた次第です。
1行目のデータになっていると気づいた次第です。
492デフォルトの名無しさん
2016/10/19(水) 08:22:02.29ID:p26QOV7Y >>488
こういうこと?再現しないよ
use Data::Dumper;
my $input = ["abc", "def", "ghi"];
for(my $i=0; $i<=$#$input; $i++) {
print Dumper($input->[$i]), "\n";
}
&func;
sub func {
for(my $i=0; $i<=$#$input; $i++) {
print Dumper($input->[$i]), "\n";
}
}
こういうこと?再現しないよ
use Data::Dumper;
my $input = ["abc", "def", "ghi"];
for(my $i=0; $i<=$#$input; $i++) {
print Dumper($input->[$i]), "\n";
}
&func;
sub func {
for(my $i=0; $i<=$#$input; $i++) {
print Dumper($input->[$i]), "\n";
}
}
493デフォルトの名無しさん
2016/10/19(水) 09:10:37.02ID:cfM1WNHO >>492
要はそういうことなんだと思います。csvファイルを読み込んで
$input[[1, 2, 3],[4, 5, 6],[7, 8, 9]];
for (my $i=0; $i<$#$input; $i++) {print Dumper($input->[$i]),"\n";}
でDumperのフォーマットですが[1, 2, 3],[4, 5, 6],[7, 8, 9]を表示
sub funcの中で同じforをすると
Dumperのフォーマットですが[1, 2, 3],[1, 2, 3],[1, 2, 3]を表示します。
必要なところを抽出して現象がでたらソースをアップします。
要はそういうことなんだと思います。csvファイルを読み込んで
$input[[1, 2, 3],[4, 5, 6],[7, 8, 9]];
for (my $i=0; $i<$#$input; $i++) {print Dumper($input->[$i]),"\n";}
でDumperのフォーマットですが[1, 2, 3],[4, 5, 6],[7, 8, 9]を表示
sub funcの中で同じforをすると
Dumperのフォーマットですが[1, 2, 3],[1, 2, 3],[1, 2, 3]を表示します。
必要なところを抽出して現象がでたらソースをアップします。
494490
2016/10/19(水) 13:56:56.14ID:cfM1WNHO ループ内で行っていた条件分岐の間違いでした。お騒がせしました。
489さん、492さん、ありがとうございました。
489さん、492さん、ありがとうございました。
495デフォルトの名無しさん
2016/10/22(土) 10:51:15.40ID:NzADNRlY 良い回答はないと思うんだけど、正規表現で指定する内容をランダムで作り出す方法ってないかな。
例えば
/^[0-9][0-9a-zA-Z]{4}[A-Z]$/;
だったら
5scDuZ
とかが得られますよ的な。
例えば
/^[0-9][0-9a-zA-Z]{4}[A-Z]$/;
だったら
5scDuZ
とかが得られますよ的な。
496デフォルトの名無しさん
2016/10/22(土) 11:26:59.02ID:PD3z3WkO String::Random
497デフォルトの名無しさん
2016/10/22(土) 11:46:10.43ID:NzADNRlY おいおいなんでもあるなPerlって
498デフォルトの名無しさん
2016/10/22(土) 17:34:20.47ID:BSsXTeb9 CPANのモジュールも更新されないものが増えてきた
もうオワコン
もうオワコン
499デフォルトの名無しさん
2016/10/25(火) 21:00:26.38ID:EVpxycMx Windows環境でUnixのテキストファイルを処理します
改行LFがCR+LFに変換されてしまうのを防ぐために
perl -i.bak -p -e "BEGIN{ binmode STDIN; binmode STDOUT; } s/unko/manko/g;" hogo.txt
みたいな風に書いてるんですけど
もうちょっとスマートな書き方ありませんか?
改行LFがCR+LFに変換されてしまうのを防ぐために
perl -i.bak -p -e "BEGIN{ binmode STDIN; binmode STDOUT; } s/unko/manko/g;" hogo.txt
みたいな風に書いてるんですけど
もうちょっとスマートな書き方ありませんか?
500デフォルトの名無しさん
2016/10/25(火) 21:11:38.78ID:U4JQUv53 binmodeしないと自動変換されるの?
まぁ試してないけど、ワンライナーをやめれば良いのさ
まぁ試してないけど、ワンライナーをやめれば良いのさ
501デフォルトの名無しさん
2016/10/26(水) 00:45:00.36ID:IJ0r6zMc perl -pe
502デフォルトの名無しさん
2016/10/26(水) 03:02:37.18ID:1uI8N3VZ >>499
perl -mopen=OUT,:raw -i.bak -pe "s/unko/manko/g" hogo.txt
http://perldoc.jp/docs/perl/perlrun.pod
http://perldoc.jp/docs/perl/open.pod
perl -mopen=OUT,:raw -i.bak -pe "s/unko/manko/g" hogo.txt
http://perldoc.jp/docs/perl/perlrun.pod
http://perldoc.jp/docs/perl/open.pod
503デフォルトの名無しさん
2016/11/10(木) 22:48:13.72ID:SbD3rZb1 perlの場合は文字コードがEUCのデータファイルがあって
入力フォームからハングル文字で書き込むと自動的に&#○○○;の形に変換されて書き込まれるのですか?
入力フォームからハングル文字で書き込むと自動的に&#○○○;の形に変換されて書き込まれるのですか?
504デフォルトの名無しさん
2016/11/10(木) 22:56:55.76ID:Him+SRv0 フォームってなに?
505デフォルトの名無しさん
2016/11/10(木) 23:16:39.82ID:e4bBCogG 日本語と知能が不自由なあちらの人じゃない?
506デフォルトの名無しさん
2016/11/10(木) 23:30:34.65ID:XrxEtHdJ 最近はフォームを知らない人がいるんだ
おぢさん、世代ギャップを感じるよ
おぢさん、世代ギャップを感じるよ
507デフォルトの名無しさん
2016/11/11(金) 00:26:38.27ID:dQSao3i1 うわ、知能障害者がまた来たよ。
それともゆとり世代の代表例かな?
それともゆとり世代の代表例かな?
508デフォルトの名無しさん
2016/11/11(金) 12:07:09.49ID:PHyMHsut my $str = "aaa〹&bbb&ccc";
という文字列があって
&#以外の&を&に置換するやり方は?
という文字列があって
&#以外の&を&に置換するやり方は?
509デフォルトの名無しさん
2016/11/11(金) 12:09:09.25ID:PHyMHsut my $str = "aaa&#12345;bbb&ccc";
という文字列があって
&#以外の&を&に置換するやり方は?
#はここでは全角で入力したけど半角です
という文字列があって
&#以外の&を&に置換するやり方は?
#はここでは全角で入力したけど半角です
510デフォルトの名無しさん
2016/11/11(金) 12:09:58.95ID:PHyMHsut 訂正
my $str = "aaa&#12345;bbb&ccc";
という文字列があって
&#以外の&を&amp;に置換するやり方は?
#はここでは全角で入力したけど半角です
my $str = "aaa&#12345;bbb&ccc";
という文字列があって
&#以外の&を&amp;に置換するやり方は?
#はここでは全角で入力したけど半角です
511デフォルトの名無しさん
2016/11/11(金) 12:42:23.87ID:Bnx4QB3I 昨日の知能に問題がある人か
512デフォルトの名無しさん
2016/11/11(金) 12:49:30.58ID:mEGzssAg s/&(?!#)/&amp;/g
(?!...) 否定先読み
(?!...) 否定先読み
513デフォルトの名無しさん
2016/11/11(金) 17:35:35.83ID:KyOrnFnp こういう時日本語は全角文字を使えて便利だね
海外の人は&や#が入力できない時苦労しそう
海外の人は&や#が入力できない時苦労しそう
514デフォルトの名無しさん
2016/11/11(金) 17:40:50.55ID:OyxHpcMK 文字参照で書けばどうか?
s/&(?!#)/&/g
s/&(?!#)/&/g
515デフォルトの名無しさん
2016/11/11(金) 23:23:43.62ID:PHyMHsut できました
それとこの文字列で
my $str = "&amp;&amp;&am";
それとこの文字列で&amp;でない&(この場合一番後ろの&)を&amp;に置換するには
どうすればいいんでしょうか?
それとこの文字列で
my $str = "&amp;&amp;&am";
それとこの文字列で&amp;でない&(この場合一番後ろの&)を&amp;に置換するには
どうすればいいんでしょうか?
516デフォルトの名無しさん
2016/11/11(金) 23:38:03.46ID:mEGzssAg それも否定先読みじゃないの
同じようにやってごらん
同じようにやってごらん
517デフォルトの名無しさん
2016/12/07(水) 13:14:37.83ID:AwnLgrFF すみません教えてください。
DBD::CSVというのは
標準モジュールに含まれるのでしょうか?
DBD::CSVというのは
標準モジュールに含まれるのでしょうか?
518デフォルトの名無しさん
2016/12/07(水) 15:08:45.45ID:eBB6Jpl7 そもそもDBIが標準モジュールではない
519デフォルトの名無しさん
2016/12/07(水) 15:12:26.59ID:MGgEOjpT520デフォルトの名無しさん
2016/12/07(水) 15:13:12.93ID:AwnLgrFF521デフォルトの名無しさん
2016/12/07(水) 15:18:54.39ID:AwnLgrFF■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★3 [蚤の市★]
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★11 [ぐれ★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 経団連会長、日中は建設的対話を 経済3団体が高市首相と初会談も日中関係は話題に登らず… [BFU★]
- 中国「高市が頭を下げて謝罪しない限り、絶対に許さない」 [329329848]
- 今猛烈に食べたいもの挙げてけwwwwwwww
- 橋下徹「口だけ番長の日本が中国に喧嘩負け。なんとカッコ悪い日本か!」高市にバチーン!✴ [153490809]
- 【高市早苗】習近平激怒か [115996789]
- 🏡
- 今猛烈に食べたいもの挙げてけwwwwwwww
