CGI についての質問は板違いです。WEB プログラミング板でどうぞ。
CGI と Perl の区別がつかない人も WEB プログラミング板に行ってください。
(WEB プログラミング板: http://hibari.2ch.net/php/ )
回答する際はモダンな方法でお願いします
(例 jcode.plではなくEncodeモジュールを使った方法)
理由はもう2012年です。いい加減2000年以前の方法はやめましょう。
最新のPerlを使うほうがかっこいいです。
いつまで勉強しないつもりですか?
過去にとらわれるのはもうやめです。進歩しませんよ。
このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
"The duct tape of the Internet" こと、Perl についての質問箱です。
"There's more than one way to do it" ということで、
Perl の奥深さについて皆で語り合い、追求してまいりましょう。
http://www.perl.org/get.html
● 2011/10/30 現在の最新版: 5.14.2
▼ 前スレ
Perlについての質問箱 49箱目
http://toro.2ch.net/test/read.cgi/tech/1319953460/
リンク集は >>2-3辺り
Perl 日本語処理の基礎の基礎 >>4辺り
探検
【モダン推奨】Perlについての質問箱 50箱目
レス数が950を超えています。1000を超えると書き込みができなくなります。
2012/01/21(土) 10:56:39.03
894デフォルトの名無しさん
2019/12/13(金) 23:43:34.11ID:tge0kpAy それでもちゃんと呼び出せるからべつにいいやん。
895デフォルトの名無しさん
2019/12/13(金) 23:53:07.48ID:Roals1MV (\@∀@)
896デフォルトの名無しさん
2019/12/14(土) 00:01:01.77ID:C/H6m2n1 配列をコンマで区切って並べると、多次元配列にならずに配列が繋がるだけ
というシンプルな仕様が仇になってるんだよな
どうあがいても、引数に配列が現れると、その後の引数と合体してしまうので、
リファレンスで渡すしか無い
だからって、push(\@array, $var) みたい使い方を強いるのは不格好過ぎる
ということで、呼び出し側では実引数を渡しているように見えて、
裏ではリファレンスで受け取るというねじれが生じていて、
プロトタイプでそのねじれを吸収している
というシンプルな仕様が仇になってるんだよな
どうあがいても、引数に配列が現れると、その後の引数と合体してしまうので、
リファレンスで渡すしか無い
だからって、push(\@array, $var) みたい使い方を強いるのは不格好過ぎる
ということで、呼び出し側では実引数を渡しているように見えて、
裏ではリファレンスで受け取るというねじれが生じていて、
プロトタイプでそのねじれを吸収している
897デフォルトの名無しさん
2019/12/14(土) 08:31:07.01ID:tdigeeoh898デフォルトの名無しさん
2019/12/14(土) 08:37:29.90ID:tdigeeoh 通常は、プロトタイプ使ったサブルーチンはモジュールの中に隔離して
perldocだけ読ませて使わせるから、>>893の問題は生じないんだけどなw
個人のコードでどう扱うかは知らん。
代表的なプロトタイプのコードの例↓(List::MoreUtilsの古いバージョン)
https://fastapi.metacpan.org/source/ADAMK/List-MoreUtils-0.33/lib/List/MoreUtils.pm
perldocだけ読ませて使わせるから、>>893の問題は生じないんだけどなw
個人のコードでどう扱うかは知らん。
代表的なプロトタイプのコードの例↓(List::MoreUtilsの古いバージョン)
https://fastapi.metacpan.org/source/ADAMK/List-MoreUtils-0.33/lib/List/MoreUtils.pm
899デフォルトの名無しさん
2019/12/14(土) 09:03:25.68ID:C/H6m2n1 >>897
それエラーになるだけ
それエラーになるだけ
900デフォルトの名無しさん
2019/12/14(土) 09:22:43.70ID:tdigeeoh901デフォルトの名無しさん
2019/12/14(土) 10:07:00.59ID:tdigeeoh 暇だったから、plenv に 5.30.1 突っ込んで確認したが、エラーにならん
もちろんuse strict; use warnings; 効かせて
# ストロベリーとかの環境は知らん
sub pusht (¥@@){ my $c = shift ; push @{$c}, @_ ; }
my @arr ;
my $arr ;
pusht @arr, 1, 2, 3, 4 ;
&pusht( $arr, 1, 2, 3, 4 ) ;
# @arr => ( 1, 2, 3, 4 )
# $arr => undef
もちろんuse strict; use warnings; 効かせて
# ストロベリーとかの環境は知らん
sub pusht (¥@@){ my $c = shift ; push @{$c}, @_ ; }
my @arr ;
my $arr ;
pusht @arr, 1, 2, 3, 4 ;
&pusht( $arr, 1, 2, 3, 4 ) ;
# @arr => ( 1, 2, 3, 4 )
# $arr => undef
902デフォルトの名無しさん
2019/12/14(土) 11:03:07.43ID:6h9Np3wz ふつうに関数を呼び出すのにわざわざ&をつけるようなヤツは、10人に1人もいねえよ。w
903デフォルトの名無しさん
2019/12/14(土) 11:20:47.16ID:FPT3g5nH いないとどれだけ楽か(泣)
「KENT-webに書いてありましたよ」
「」
「KENT-webに書いてありましたよ」
「」
904デフォルトの名無しさん
2019/12/14(土) 11:36:46.61ID:tdigeeoh905デフォルトの名無しさん
2019/12/15(日) 00:13:17.48ID:uHh4aFtn &つけるのって少数派なのか
俺絶対つけてるけど
ある現場で「え、今そんなのつけませんよ…」ってちょっと引いてすらいる感じで言われたことある
まあもうその現場もrailsになったはずだけど
俺絶対つけてるけど
ある現場で「え、今そんなのつけませんよ…」ってちょっと引いてすらいる感じで言われたことある
まあもうその現場もrailsになったはずだけど
906デフォルトの名無しさん
2019/12/15(日) 00:30:38.21ID:gPijPjuC C言語でもautoって書いてそうだ
907デフォルトの名無しさん
2019/12/15(日) 01:55:45.57ID:EMEs5NEs908デフォルトの名無しさん
2019/12/15(日) 02:19:39.95ID:uHh4aFtn これは関数であるって目印としてつけてる
俺の中では可読性の為
つけないのはData::Dumper()とかモジュールから直で呼ぶ場合だけかな
俺の中では可読性の為
つけないのはData::Dumper()とかモジュールから直で呼ぶ場合だけかな
909デフォルトの名無しさん
2019/12/15(日) 07:37:43.49ID:R35TvKP/ 呼出で挙動がかわるの、充分に分ってるなら「個人で使うなら」いいんじゃねーの?
910デフォルトの名無しさん
2019/12/15(日) 07:43:22.45ID:R35TvKP/ プロトタイプの呼出以外にも
@_ = (1,2,3,4) ; &func ;
で特殊挙動するし、地雷だらけだよXXルーチン
なんでXXがNGワードになってんの?
北島三郎のことXXちゃんって書き込めないの?
俺の環境だけ?
>>907
「perl, XXルーチン」でググると検索上位に来るんだよ、今でも
@_ = (1,2,3,4) ; &func ;
で特殊挙動するし、地雷だらけだよXXルーチン
なんでXXがNGワードになってんの?
北島三郎のことXXちゃんって書き込めないの?
俺の環境だけ?
>>907
「perl, XXルーチン」でググると検索上位に来るんだよ、今でも
911デフォルトの名無しさん
2019/12/15(日) 07:46:10.55ID:gPijPjuC サブルーチン
912デフォルトの名無しさん
2019/12/15(日) 07:47:19.44ID:KI19HfKk teratailのサブルーチン絡みの質問斜め見て、頭痛くなったわ。
質問者はしょうがないとしても、回答で&付けるってどういう了見だ?
質問者はしょうがないとしても、回答で&付けるってどういう了見だ?
913デフォルトの名無しさん
2019/12/15(日) 07:48:41.86ID:R35TvKP/ 俺の環境だけかよorz…
914デフォルトの名無しさん
2019/12/15(日) 08:32:32.51ID:KI19HfKk >>904
お作法本全盛期(2010年代前半)なら、相手はお作法本を読んでる可能性がある。
引いてる程度じゃなくて、どん引きされたのかもよ
# お作法本: Perl ベストプラクティス、Effective Perl etc.
KENT-webもだけど、お作法本インスパイヤで、オレオレお作法のページが
山程あるのも滅んで欲しいわ。
お作法本全盛期(2010年代前半)なら、相手はお作法本を読んでる可能性がある。
引いてる程度じゃなくて、どん引きされたのかもよ
# お作法本: Perl ベストプラクティス、Effective Perl etc.
KENT-webもだけど、お作法本インスパイヤで、オレオレお作法のページが
山程あるのも滅んで欲しいわ。
915デフォルトの名無しさん
2019/12/15(日) 08:34:58.76ID:KI19HfKk916デフォルトの名無しさん
2019/12/15(日) 08:46:16.32ID:gPijPjuC 作法は一つではない
917デフォルトの名無しさん
2019/12/15(日) 08:51:11.22ID:KI19HfKk 一つじゃないのは当たり前
けど、オレオレお作法のページはいらない
けど、オレオレお作法のページはいらない
918デフォルトの名無しさん
2019/12/20(金) 00:38:27.17ID:nzfj8t5I919デフォルトの名無しさん
2019/12/20(金) 00:57:05.41ID:cphYS5E7 YAPC が YARC になって ヤラしい
920デフォルトの名無しさん
2019/12/20(金) 06:50:52.69ID:GiJ3WKor keysがスカラを引数に取れるせいで、なんか間違った書き方してる所があちこちある
どっちでも大抵は動くけど、エラーで止まりやすい
明示的にデリファレンスしてればエラーにはならない
どっちでも大抵は動くけど、エラーで止まりやすい
明示的にデリファレンスしてればエラーにはならない
921デフォルトの名無しさん
2019/12/20(金) 07:10:52.86ID:8NcASRwh それ、実験的に5.14から搭載されて、5.24で削除された機能
エラーで止るのは環境依存か、書き手がヘボか
そもそも使うんじゃねー、ってのが主旨なら、同意
エラーで止るのは環境依存か、書き手がヘボか
そもそも使うんじゃねー、ってのが主旨なら、同意
922デフォルトの名無しさん
2020/02/14(金) 23:14:26.30ID:x2wQj3nb 配列があって、条件に合わないものを削りたい
0 .. $#array に対してループしながらspliceすると、
$i-- でも redo でもなんか不安がある
どうするのが定番なんだろう
0 .. $#array に対してループしながらspliceすると、
$i-- でも redo でもなんか不安がある
どうするのが定番なんだろう
923デフォルトの名無しさん
2020/02/15(土) 13:11:27.84ID:Slu9Ub4W grep { $_ > 0 } @array
924デフォルトの名無しさん
2020/02/15(土) 18:06:37.80ID:jU+J++ht @array = grep { $_ > 0 } @array
とやって平気な気がしない
別の配列を用意していいなら既に出来ていて、
それを何とかすっきりできないかと
とやって平気な気がしない
別の配列を用意していいなら既に出来ていて、
それを何とかすっきりできないかと
925デフォルトの名無しさん
2020/02/15(土) 19:06:58.27ID:Slu9Ub4W (平気な気がしないとか言われても知らんがな)
まず「すっきりできる」を定義してください
まず「すっきりできる」を定義してください
926デフォルトの名無しさん
2020/02/15(土) 19:20:44.91ID:jU+J++ht ああー
逃げに入っちゃった
逃げに入っちゃった
927デフォルトの名無しさん
2020/02/15(土) 23:03:36.63ID:pIpzwBTs spliceするのはよくない気がする→何が定番なんだろうって話だと
grepが定番でしょ
別に結果配列用意するのでもいいんじゃないの
grepが定番でしょ
別に結果配列用意するのでもいいんじゃないの
928デフォルトの名無しさん
2020/02/15(土) 23:40:20.22ID:KTVOtCHP spliceの、僕が考えた最強関数的な仕様はイヤかも。
もっと構文レベルで同じことができると良かった。
もっと構文レベルで同じことができると良かった。
929デフォルトの名無しさん
2020/05/09(土) 14:56:48.37ID:KF1jgHuK WindowsでPerlを使いたいんですが、どれが良いですか。
ActivePerlはアンインストールしてもゴミが残るそうなので避けたいのですが。
ActivePerlはアンインストールしてもゴミが残るそうなので避けたいのですが。
930デフォルトの名無しさん
2020/05/09(土) 18:21:47.00ID:HzJsK433 ストロベリーパニック
931デフォルトの名無しさん
2020/05/09(土) 18:51:24.57ID:/Z4Vk9Yy Windows10, WSL, Ubuntu 18.04 なら、最初から入っているけど
file `which perl`
/usr/bin/perl: ELF 64-bit LSB shared object 以下省略
file `which perl`
/usr/bin/perl: ELF 64-bit LSB shared object 以下省略
932デフォルトの名無しさん
2020/05/27(水) 01:20:04.31ID:VqjzWrQC Perlを勉強しています。
「use constant」で定義したハッシュのキーを
keys関数で取り出したいのですが出来ません。
どのような方法で取り出せますか?
use constant H => { a=>'AAA', b=>'BBB' };
foreach ( keys H ) #エラー。「keys %H」とするとエラーにならないが何も得られない。
{
print $_, "\n";
}
宜しくお願いします。
「use constant」で定義したハッシュのキーを
keys関数で取り出したいのですが出来ません。
どのような方法で取り出せますか?
use constant H => { a=>'AAA', b=>'BBB' };
foreach ( keys H ) #エラー。「keys %H」とするとエラーにならないが何も得られない。
{
print $_, "\n";
}
宜しくお願いします。
933デフォルトの名無しさん
2020/05/27(水) 01:33:03.79ID:h9Mc4KsU use constant H => { a=>'AAA', b=>'BBB' };
foreach (keys %{H()}) {
print $_, "\n";
}
foreach (keys %{H()}) {
print $_, "\n";
}
934デフォルトの名無しさん
2020/05/27(水) 02:12:19.49ID:VqjzWrQC936デフォルトの名無しさん
2020/05/27(水) 05:13:22.61ID:ISGE1WR5 Perl は難しすぎる。
Ruby では、
hash = { a: 1, b: 2 }
hash.each_key { |key| p key }
出力。:a などはシンボル
:a
:b
Ruby では、
hash = { a: 1, b: 2 }
hash.each_key { |key| p key }
出力。:a などはシンボル
:a
:b
937デフォルトの名無しさん
2020/05/27(水) 06:47:35.32ID:VqjzWrQC938615
2020/05/27(水) 08:50:36.01ID:Bt/CFCtA constantの実体は値を返すsubなので、%{}でデリファレンスしてね
939デフォルトの名無しさん
2020/09/28(月) 17:41:16.96ID:7jydyBLu (?:)
をいつも忘れるんだが、何かいい覚え方は無いだろうか
をいつも忘れるんだが、何かいい覚え方は無いだろうか
940デフォルトの名無しさん
2020/09/28(月) 19:13:20.83ID:SgTMPvZg941デフォルトの名無しさん
2020/10/04(日) 23:18:25.80ID:4IGvE5yV >>939
いいじゃんべつに。気にせず普通の括弧にして捨てろ。
いいじゃんべつに。気にせず普通の括弧にして捨てろ。
942デフォルトの名無しさん
2020/10/05(月) 07:42:46.02ID:c4eZ6okl ずれるやん
943デフォルトの名無しさん
2020/10/07(水) 12:09:24.93ID:70BaWviw944デフォルトの名無しさん
2020/10/07(水) 13:37:28.91ID:TO7pfOqH945デフォルトの名無しさん
2020/10/07(水) 15:33:40.38ID:GbKtGfRD あと、マッチングのオプションのsとmも毎回検索してる
最初に思うのは大抵逆
最初に思うのは大抵逆
946デフォルトの名無しさん
2020/10/08(木) 09:33:52.95ID:e3wo1zjN (?シリーズをいろいろ使ってれば、あとは:だけだけど、
そもそも(?:しか使わないんだよな
いろいろ便利そうな拡張ではあるけどこれ以上可読性下げてどうする
そもそも(?:しか使わないんだよな
いろいろ便利そうな拡張ではあるけどこれ以上可読性下げてどうする
947デフォルトの名無しさん
2020/10/09(金) 14:54:01.89ID:JXQ8Trls TABをデリミタにしてデータが1行に並んでいる
但し、""で囲まれていれば内部にTABを使ってもよい
というルールのデータに対して、""に囲まれているTABをスペースで置換したい
どう書けばいい?
但し、""で囲まれていれば内部にTABを使ってもよい
というルールのデータに対して、""に囲まれているTABをスペースで置換したい
どう書けばいい?
948デフォルトの名無しさん
2020/10/11(日) 19:55:14.93ID:LEwrAD/J 多分、これでいけると思う。
while(s{(".*?)\t(.*?")}{$1 $2}){}
while(s{(".*?)\t(.*?")}{$1 $2}){}
949デフォルトの名無しさん
2020/10/11(日) 21:05:02.09ID:OOWRCRR6 どうやって使うかすら判らん
950デフォルトの名無しさん
2020/10/11(日) 22:14:06.89ID:LEwrAD/J while(<>){
while(s{(".*?)\t(.*?")}{$1 $2}){}
print;
}
これで解らないなら、「Perlの入門書をよく読みましょう」
としか言えないのだが。
while(s{(".*?)\t(.*?")}{$1 $2}){}
print;
}
これで解らないなら、「Perlの入門書をよく読みましょう」
としか言えないのだが。
951デフォルトの名無しさん
2020/10/11(日) 22:42:11.43ID:OOWRCRR6 せめて入力が$strとかになってないと
952デフォルトの名無しさん
2020/10/11(日) 23:29:39.25ID:LEwrAD/J while($str =~ s{(".*?)\t(.*?")}{$1 $2}){}
しかし、Perlを使うなら、文中で省略されている$_ のことは
知っておかないといけない。
しかし、Perlを使うなら、文中で省略されている$_ のことは
知っておかないといけない。
953デフォルトの名無しさん
2020/10/11(日) 23:56:48.98ID:LtBR6JI3 タブ文字が複数あったら?とかダブルクォートが含まれてたら?とか、不安もいろいろ。
いわゆるExcelCSVなら、置換一発とはイカンやろな。
CSVモジュールでも探すか、マジメに自作するかして、セルごとに置換しないと個人的には落ち着かないな。
いわゆるExcelCSVなら、置換一発とはイカンやろな。
CSVモジュールでも探すか、マジメに自作するかして、セルごとに置換しないと個人的には落ち着かないな。
954デフォルトの名無しさん
2021/03/25(木) 23:19:00.52ID:BFmdRR/m $_ などの特殊変数に依存したコードを書くと移植性と可読性が著しく低下する。
正規表現にまつわる特殊変数も厄介。別の正規表現が呼ばれて上書きされてしまうからすぐにコピーしないといけない。
正規表現にまつわる特殊変数も厄介。別の正規表現が呼ばれて上書きされてしまうからすぐにコピーしないといけない。
955デフォルトの名無しさん
2021/04/28(水) 14:52:38.35ID:RETJLOh2 ビットシフト演算の挙動の違いが表面化した
32bitと64bitのビルドの違いにより、1 << 32の結果が変わる
32bitのperlが2^32以上の整数を扱えない訳ではないので、
ビットシフト演算子を使わずにビットシフト演算子と同じことをやらないといけない
何か抜け道は無いもんか
32bitと64bitのビルドの違いにより、1 << 32の結果が変わる
32bitのperlが2^32以上の整数を扱えない訳ではないので、
ビットシフト演算子を使わずにビットシフト演算子と同じことをやらないといけない
何か抜け道は無いもんか
956デフォルトの名無しさん
2021/04/30(金) 18:29:08.85ID:m/tHuDzV957デフォルトの名無しさん
2021/04/30(金) 19:23:07.21ID:vAph35tm もっそい遅いんだっけ
958デフォルトの名無しさん
2021/04/30(金) 19:31:00.11ID:m/tHuDzV use bigint だと透過的にできることがわかった。
こんなのできたし。
$ perl -e 'use bigint; my $x = 1; $x <<= 256; print "$x\n"; if ($x & (1 << 256)){print "OK\n";}'
115792089237316195423570985008687907853269984665640564039457584007913129639936
OK
$
日本語訳された bigint のマニュアル
https://perldoc.jp/docs/modules/bignum-0.23/bigint.pod
こんなのできたし。
$ perl -e 'use bigint; my $x = 1; $x <<= 256; print "$x\n"; if ($x & (1 << 256)){print "OK\n";}'
115792089237316195423570985008687907853269984665640564039457584007913129639936
OK
$
日本語訳された bigint のマニュアル
https://perldoc.jp/docs/modules/bignum-0.23/bigint.pod
959デフォルトの名無しさん
2021/04/30(金) 19:43:01.50ID:vAph35tm 何をしたいかというと、8byte単位の送信データがあって、
実際にはそれを64bitと見ていて、あるレコードは何bit目から何bit長、みたいに詰め込まれている
byte間とか平気でまたぐ
そういう64bitにデータをセットしたり取り出したり、という操作をしようと思うと、
1変数が64bitになっている方が楽に書ける
でも32bitの処理系だとできない
実際にはそれを64bitと見ていて、あるレコードは何bit目から何bit長、みたいに詰め込まれている
byte間とか平気でまたぐ
そういう64bitにデータをセットしたり取り出したり、という操作をしようと思うと、
1変数が64bitになっている方が楽に書ける
でも32bitの処理系だとできない
960デフォルトの名無しさん
2021/05/01(土) 05:00:07.50ID:R5WysE71 ネットワークの通信データの取り出しなら unpack でフォーマットを N2 で配列または変数2個に取り出してからやれば楽なのでは?
961デフォルトの名無しさん
2021/05/01(土) 09:00:30.12ID:/n1q7kUC やれるとすっきりするけど、バイトオーダーやエンディアンがころころ変わるから、
何か落とし穴がありそう
何か落とし穴がありそう
962デフォルトの名無しさん
2021/05/01(土) 09:21:38.72ID:ZNKsJp5F Perl の仕様が邪魔してるということなら Inline::C とかが役に立つかも。
963デフォルトの名無しさん
2021/05/01(土) 16:05:36.08ID:R5WysE71 pack, unpack は互換性重視していると思うが? 少なくともフォーマットの N 等は同じ4バイトだよ。
その辺どうしても信用できないなら自分専用の pack, unpack を作れば良いんじゃないかな。
そうすると pack, unpack と同じ形式である必要もないわけだが。
その辺どうしても信用できないなら自分専用の pack, unpack を作れば良いんじゃないかな。
そうすると pack, unpack と同じ形式である必要もないわけだが。
964デフォルトの名無しさん
2021/05/01(土) 18:01:49.35ID:/n1q7kUC そんなようなことをしてるのが現状の実装
965デフォルトの名無しさん
2021/05/02(日) 17:15:11.59ID:9gapCdI8 そういえば Perl のネイティブな整数のサイズって C のどれなのかな。
perlnumber には「perl をビルドする際に使われた C コンパイラが対応している形式」と
書かれてるけど。
ちなみに今使ってる環境では int ではなく long , long long と同じ 8 バイトのようだ。
perlnumber には「perl をビルドする際に使われた C コンパイラが対応している形式」と
書かれてるけど。
ちなみに今使ってる環境では int ではなく long , long long と同じ 8 バイトのようだ。
966デフォルトの名無しさん
2021/05/03(月) 17:40:45.60ID:UFgXt23Q Perl5のビルドはやった事ないので知らないが、多分デフォルトがCのintと同じで指定すれば変えられるって感じなのではないかな。
perl -V で実行するとそういう設定値が沢山出てくるよね。その中に intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
のようなものが出てくる。
そういや前に整数のバイト数でハマったことあったな。 fcntl() の F_SETLKW の時に渡す flock 構造体のバイナリで
pack('s2l3', F_WRLCK, SEEK_SET, 0, 0, 0) ってやっててうまく行ってたプログラムが別の環境に持って行って動かしたら
ロックが掛かったり掛からなかったりするようになり、良く調べてみたら pack の l は64bit環境でも 32bit 固定だが
struct flock の方は l_start, l_len が32bit OS では 4 バイト、64bit 環境では 8 バイトになっていた。
そもそも pack してバイナリにしなければいけないような引数の渡し方がいけないだけだとは思うが、結局どちらの
環境でも動くプログラムにするために pack('s2l5', F_WRLCK, SEEK_SET, 0, 0, 0, 0, 0) で誤魔化した。
やっぱこういうのは本来ならモジュール作ってそこで吸収した方が良いんだろうな。
と思ったらあった。
https://metacpan.org/pod/File::FcntlLock
是非デフォルトでこういうモジュールも perl と一緒にインストールされて欲しいものだな。
perl -V で実行するとそういう設定値が沢山出てくるよね。その中に intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
のようなものが出てくる。
そういや前に整数のバイト数でハマったことあったな。 fcntl() の F_SETLKW の時に渡す flock 構造体のバイナリで
pack('s2l3', F_WRLCK, SEEK_SET, 0, 0, 0) ってやっててうまく行ってたプログラムが別の環境に持って行って動かしたら
ロックが掛かったり掛からなかったりするようになり、良く調べてみたら pack の l は64bit環境でも 32bit 固定だが
struct flock の方は l_start, l_len が32bit OS では 4 バイト、64bit 環境では 8 バイトになっていた。
そもそも pack してバイナリにしなければいけないような引数の渡し方がいけないだけだとは思うが、結局どちらの
環境でも動くプログラムにするために pack('s2l5', F_WRLCK, SEEK_SET, 0, 0, 0, 0, 0) で誤魔化した。
やっぱこういうのは本来ならモジュール作ってそこで吸収した方が良いんだろうな。
と思ったらあった。
https://metacpan.org/pod/File::FcntlLock
是非デフォルトでこういうモジュールも perl と一緒にインストールされて欲しいものだな。
967デフォルトの名無しさん
2021/05/04(火) 07:28:36.10ID:2rafzDNd ありがとう。たまたま Perl のソースコードをダウンロードしてあるから
INSTALL を読んでみたら (いや、先に読んどけという話だが)
C コンパイラがサポートしてなくても use64bitint というオプションを使えば
整数のサイズが 64 ビットになるらしい。
Debian のパッケージでもこれを使ってるようだ。
C コンパイラの仕様は Config モジュールで得られるから
それを使って環境に合わせた処理が可能になる場合もあるが
Linux の flock 構造体はメンバの順番すら保証されてないようだから無理そう。
INSTALL を読んでみたら (いや、先に読んどけという話だが)
C コンパイラがサポートしてなくても use64bitint というオプションを使えば
整数のサイズが 64 ビットになるらしい。
Debian のパッケージでもこれを使ってるようだ。
C コンパイラの仕様は Config モジュールで得られるから
それを使って環境に合わせた処理が可能になる場合もあるが
Linux の flock 構造体はメンバの順番すら保証されてないようだから無理そう。
968デフォルトの名無しさん
2021/05/04(火) 11:47:57.60ID:2rafzDNd 間違えた。「C コンパイラが」じゃなくて「CPU が」だ。
Configure を見た限りでは、8 バイト整数の型として採用する優先順位は
int, long, long long, int64_t の順で
8 バイトの型が無ければ Configure が失敗するようだ。
あっても CPU が対応してなくてライブラリで実現してるような環境だと
速度のためにあえて使わないという選択もあるかと思うが
long が 8 バイトだと強制的に使わされるようだ。
試せる環境が無いから勘違いしてるかもしれないが。
Configure を見た限りでは、8 バイト整数の型として採用する優先順位は
int, long, long long, int64_t の順で
8 バイトの型が無ければ Configure が失敗するようだ。
あっても CPU が対応してなくてライブラリで実現してるような環境だと
速度のためにあえて使わないという選択もあるかと思うが
long が 8 バイトだと強制的に使わされるようだ。
試せる環境が無いから勘違いしてるかもしれないが。
969デフォルトの名無しさん
2021/05/04(火) 16:45:05.36ID:xGoTe+aq さいですか
970デフォルトの名無しさん
2021/05/04(火) 16:56:22.60ID:1LbVAR3E きりんです
971デフォルトの名無しさん
2021/05/04(火) 16:58:56.75ID:siU8Ev75 なんできりんなんだよ
そこはラクダだろ
そこはラクダだろ
972デフォルトの名無しさん
2021/05/04(火) 17:08:17.38ID:FheU4VJA でも象さんのほうがもっと好きです
973デフォルトの名無しさん
2021/05/05(水) 15:08:24.73ID:CxAIF4J7 テーブルがあってインデックスで取り扱いたい
でもテーブルを作る時にカウンタとか意識したくない
配列なら
push @table, $data;
で済むけど、ハッシュにしたい
$table[$i]->data1 = $data1;
あるいは
$table->[$i]->data1 = $data1;
そんなことできたっけ
でもテーブルを作る時にカウンタとか意識したくない
配列なら
push @table, $data;
で済むけど、ハッシュにしたい
$table[$i]->data1 = $data1;
あるいは
$table->[$i]->data1 = $data1;
そんなことできたっけ
974デフォルトの名無しさん
2021/05/05(水) 15:53:07.29ID:zZpLK+nt 日本語でおk
975デフォルトの名無しさん
2021/05/05(水) 16:00:54.87ID:CxAIF4J7 全部一度に判ってるなら、無名ハッシュをpushすればいいんだけど
ちょびちょび追加していきたい
ちょびちょび追加していきたい
976デフォルトの名無しさん
2021/05/06(木) 21:44:26.70ID:ajjDZVcw 君が何をしたいのかよくわからない。
977デフォルトの名無しさん
2021/05/06(木) 21:49:53.54ID:WUloT9c9 ->data1は->{data1}の間違い
978デフォルトの名無しさん
2021/05/16(日) 14:19:41.36ID:vhU8s59y pontiffがprintfに見える
979デフォルトの名無しさん
2021/05/24(月) 07:52:58.62ID:GjHEXSDD 親の方は無限ループにしておいて、適宜forkしてメインの処理をさせる
終わったら子はexitする
という作りで基本的にうまくいってるのに、たまに親が子だと思ってexitしとる
$pid = fork;
if (!$pid) {
exec($command);
exit;
}
この書き方に何か問題が?
終わったら子はexitする
という作りで基本的にうまくいってるのに、たまに親が子だと思ってexitしとる
$pid = fork;
if (!$pid) {
exec($command);
exit;
}
この書き方に何か問題が?
980デフォルトの名無しさん
2021/05/24(月) 08:16:28.74ID:INcwcLMt 親プロセスがwait $pid しないとゾンビが蓄積される。
それが続くと0ではなくundefを返すと思う。思うとしか言えないのはperldocに書かれてないから。
defined $pid でundefと0を区別する必要あり。
$!にResource temporarily unavailableのようなエラーが渡されるのでたぶんそう。
なのでちゃんと親プロセスがwait $pidすれば回避できる。
それが続くと0ではなくundefを返すと思う。思うとしか言えないのはperldocに書かれてないから。
defined $pid でundefと0を区別する必要あり。
$!にResource temporarily unavailableのようなエラーが渡されるのでたぶんそう。
なのでちゃんと親プロセスがwait $pidすれば回避できる。
981デフォルトの名無しさん
2021/05/24(月) 08:19:17.40ID:INcwcLMt 訂正。
perldoc -f forkにfork失敗時にundefを返すことが書かれてたわ
perldoc -f forkにfork失敗時にundefを返すことが書かれてたわ
982デフォルトの名無しさん
2021/05/24(月) 08:22:50.85ID:GjHEXSDD やっぱり失敗してるんだよな
リトライするように直して試してみてるとこ
どういう理由で失敗するんだ?
activeperl
リトライするように直して試してみてるとこ
どういう理由で失敗するんだ?
activeperl
983デフォルトの名無しさん
2021/05/24(月) 13:11:06.83ID:SHUy6n38 windows版のforkもどきだからじゃないの?
984デフォルトの名無しさん
2021/05/24(月) 13:35:57.27ID:INcwcLMt macOSでも起きるよ
985デフォルトの名無しさん
2021/05/24(月) 13:56:03.81ID:GjHEXSDD 今たまたま何かのリソースが全部埋まってて、一瞬待ってくれたら準備できるよ
なんだったら、リトライは隠蔽してくれて良さそうなもんなのに
IO関係はみんなそうなってる
なんだったら、リトライは隠蔽してくれて良さそうなもんなのに
IO関係はみんなそうなってる
986デフォルトの名無しさん
2021/05/24(月) 16:23:07.38ID:mQhym/iw Perlはかなりの低レイヤーでも使われることがあるからな。
そんな冗長にはできんやろ。
そもそも、ぜんぜんwaitpid()しなかったらいずれ困るんだから、早くエラーになったほうがまし。
そんな冗長にはできんやろ。
そもそも、ぜんぜんwaitpid()しなかったらいずれ困るんだから、早くエラーになったほうがまし。
987デフォルトの名無しさん
2021/05/25(火) 22:10:30.48ID:z8jztsTP activeperlで
forkで返るpidがマイナスの値なんだけど、
Win32::Process::List で GetProcesses して得られるものとは別物なの?
forkで返るpidがマイナスの値なんだけど、
Win32::Process::List で GetProcesses して得られるものとは別物なの?
988デフォルトの名無しさん
2021/05/25(火) 22:38:53.48ID:/Axm+K1V989デフォルトの名無しさん
2021/05/25(火) 22:59:31.10ID:z8jztsTP 疑似プロセスIDは、OSのプロセスIDとは別物なのか
要は、forkで分岐したプロセスがまだ生きてるかどうか親から周期的に監視したいんだけど
waitすると親が止まってしまうのでどうしたもんか
要は、forkで分岐したプロセスがまだ生きてるかどうか親から周期的に監視したいんだけど
waitすると親が止まってしまうのでどうしたもんか
990デフォルトの名無しさん
2021/05/25(火) 23:54:54.75ID:/Axm+K1V 別スレッドでsystem()ではアカンのか?
991デフォルトの名無しさん
2021/05/26(水) 07:17:11.86ID:niBt7hlg スレッド使ったことない
992デフォルトの名無しさん
2021/05/26(水) 08:32:40.50ID:VVGa10VW perlのスレッドは標準IOやパイプの取り扱いが難しい、というか動きが怪しい
993デフォルトの名無しさん
2021/05/26(水) 09:53:00.68ID:+WmbAELr シェルスクリプトではkill -0 PIDでプロセスが生きてるか調べられる!
そういう用途にはシェルスクリプトを使うべき!
そういう用途にはシェルスクリプトを使うべき!
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- お前らは“スカイマイルタワー”建設計画を知っているか?
- 万引きJC「すいません許してください!何でもしますから!」←どうする?
- 自民党議員「高市は先人が築き上げた日中関係を壊した。外務省が謝罪に言ってるが自分で責任を取れ」 [834922174]
- Perfume・あ~ちゃんの結婚相手の一般男性、吉田カバンの社長と判明 [977261419]
- 「黙らせてやろうと思った」自宅マンション10階から高校テニスコート内の女子生徒目掛けて貯金箱を投擲した女の子、殺人未遂で逮捕 [399583221]
- 5時だから窓から5回ちんこ出した
