Perlについての質問箱 63箱目 at TECH
[2ch|▼Menu]
[前50を表示]
300:デフォルトの名無しさん
16/07/15 12:22:26.70 XWIPLqFW.net
>>287 それからな、
> ゴミPerl
> 産廃Perl
> 糞Perl
どれも、なかなかいいところを突いているが、ちょっと外れているな。
正解は「ガラクタ」だ。
Perl とは「pathologically eclectic rubbish lister」
(病的折衷主義のガラクタ出力装置)の 略なのだ。

301:デフォルトの名無しさん
16/07/16 12:58:34.75 STpjI2h3.net
インコード
使ったソースは
ウンコード

302:デフォルトの名無しさん
16/07/17 01:45:28.71 T2eP0LKz.net
内部エンコードはperl独特だよね。
扱えれば入力と出力がどんなエンコードだろうが無双出来るけど

303:デフォルトの名無しさん
16/07/17 09:40:41.84 kAN9hSRv.net
>>296
「Perl を愛する人にとっては」と前置きするのを忘れてるぞ。

304:デフォルトの名無しさん
16/07/17 13:59:57.99 D/SlpqZf.net
まぁperlなんて使い物にならないでしょ
use utf8;付けたらそれまで文字化けしなかったUTF8の文字列が文字化けしたし

305:デフォルトの名無しさん
16/07/17 14:42:10.28 F+fhoGjl.net
なにその理論(笑)
まぁ使いにくいのは異論ないが

306:デフォルトの名無しさん
16/07/17 16:24:12.49 Cv1W2kE4.net
ではperlじゃないならなにがいいのかな。python?
rubyはパイプ記号が変なところで出てくるからちょっと違和感有り。

307:デフォルトの名無しさん
16/07/17 17:57:00.54 PyzTEoPA.net
= パイプ記号

308:デフォルトの名無しさん
16/07/17 17:57:53.58 F+fhoGjl.net
賭けてもいいが、文字コードが分からないのをPerlのせいにしてるやつが、
自分で1からプログラミングしたら壊滅的な状況になると思う。

309:デフォルトの名無しさん
16/07/18 02:39:59.89 e41bhxXR.net
でも、かつて壊滅的な状況じゃなかったよね?

310:デフォルトの名無しさん
16/07/18 03:14:08.10 GZVIgCur.net
>賭けてもいいが、文字コードが分からないのをPerlのせいにしてるやつが、
>自分で1からプログラミングしたら壊滅的な状況になると思う。
意味不明な言動をする気違い。
「賭けてもいいが、腹が痛くなるのを残飯のせいにしてるやつが、
自分で1から料理したら壊滅的な状況になると思う。」
と言ってるのと同等で意味不明。
気違い。

311:デフォルトの名無しさん
16/07/18 07:46:08.11 C0GpTohk.net
自分で料理出来るのであれば、残飯なんて最初から食べないよ…
残飯を食べるという事は、食べざろうえない理由があっての事だろうに…

312:デフォルトの名無しさん
16/07/18 08:14:55.04 dOZOPpl8.net
すくなくとも腹痛を人のせいにしなくてすむんじゃね?

313:デフォルトの名無しさん
16/07/18 14:09:08.76 UhcVRSnP.net
高級料理も残せば残飯になるのさ。
最後の姿を見ただけで、本来の姿を判断するのは
無能というもの。

314:デフォルトの名無しさん
16/07/19 09:36:50.47 BbD/ZGSl.net
文字コードが分からないのをPerlのせいにしてるのは馬鹿の上限を突破してるが、
腹痛を残飯のせいにするのは間違ってないだろう。食ったと言う意味では馬鹿だが

315:デフォルトの名無しさん
16/07/19 14:33:33.84 kU2ISgr0.net
どんなに文字コードを理解している人間でも文字をまともに扱えないピログラム言語の前では無力
その程度のことも分からないのかはたまたPerlがまともな言語だと錯覚しているのか
もし錯覚しているならば自分の使っている言語についてほとんど何も知らないということになる
まずはその自覚をすべきである

316:デフォルトの名無しさん
16/07/19 15:10:05.04 QuuYpuW+.net
参考までに聞くけど、文字をまともに扱える言語って何?

317:デフォルトの名無しさん
16/07/19 15:23:05.53 BbD/ZGSl.net
全行つっこみどころ満載なやつにかまってはいかん

318:デフォルトの名無しさん
16/07/20 17:32:04.55 gGnx4FL9.net
んで俺も文字をまともに扱える言語がなにか気になるわけだが
310とは別人

319:デフォルトの名無しさん
16/07/20 19:56:54.60 lrew/2ZZ.net
文字は知らんけど、
Perlってあらゆる面でPHPより劣ってるよな。

320:デフォルトの名無しさん
16/07/20 20:04:27.70 y5BMpkOv.net
PHPってHTML言語じゃないの?比較の対象にもならないと思うんだが。
rubyに負けてるというならまだわかるけど。

321:デフォルトの名無しさん
16/07/20 21:52:53.39 gGnx4FL9.net
PHPてあんた

322:デフォルトの名無しさん
16/07/20 23:37:17.38 E+SEwayU.net
>>316
HTML言語ってなんやw
HTMLに埋め込めるってだけでごく普通の
プログラム言語だぞ。
どれくらい普通かというと以下の機能が搭載されてる
・クラス
・インターフェース
・トレイト
・ラムダ
・クロージャー
・名前空間
・例外
・ジェネレーター
・ガベージコレクション
あと言語機能じゃないが、CLIプログラムの作成や
ウェブフレームワークなどもある。

323:デフォルトの名無しさん
16/07/20 23:43:45.09 lrew/2ZZ.net
>PHPってHTML言語
Perl厨は他の言語をロクに知りもしないで
敬遠してるんだろうな。
だからPerl厨はいつまで経っても
エンジニアとして半人前なのだろう。

324:デフォルトの名無しさん
16/07/20 23:47:10.52 E5afqhTD.net
309ではないがC言語。もちろんPerlもだ。
ついでなんで
s/ピログラム言語/プログラム言語/;

325:デフォルトの名無しさん
16/07/20 23:55:15.99 gGnx4FL9.net
Cって純粋なC?
ご冗談を。
あれは何も文字を扱ってないよ。
自分で作って下さい、ってね。

326:デフォルトの名無しさん
16/07/20 23:58:27.03 gGnx4FL9.net
>>318
だからなに?
その機能'(笑)はわざわざ書かなくてはならないことなの?
だから文字の扱いに対してもおかしな考えを持つんだね。
文字を扱うのは言語の機能(笑)が大事なんだってね。
基本プログラムが出来ない人はスクリプトが持つ機能とやらに注目したがる。
自分でプログラミングできないからね。

327:デフォルトの名無しさん
16/07/21 00:13:43.65 qEfVH42B.net
普通のunix処理系にperlは入ってるけどPHPは入ってないでしょ。
Webプログラミングなんてどうでもいい。システムプログラミングとか
テキストマイニングしたいんだって動機から入るとぱっと見PHPは目に入らないよ。
紹介がWeb用ですなんだし。
幼児的に誹謗中傷しないで諭すコミュ力をつけたほうが。。

328:デフォルトの名無しさん
16/07/21 01:02:15.71 eeWcI0WT.net
PerlとPHPを比較するって事自体、CGIの定番としてPerlが使われはじめた15〜20年ぐらい前の話だから

329:デフォルトの名無しさん
16/07/21 02:09:41.10 vaQfL518.net
>>322
> その機能'(笑)はわざわざ書かなくてはならないことなの?
わざわざ書かないとわからないでしょ?w
これ以外に何が必要なんだい?
言ってみ。

330:デフォルトの名無しさん
16/07/21 02:18:26.64 QEbE4SDT.net
>>321
お前のいう文字は文字列のことか?

331:デフォルトの名無しさん
16/07/21 09:47:01.78 oSsee0hG.net
質問者が言う文字だ
質問じゃなくて子供の八つ当たりに見えたが

332:デフォルトの名無しさん
16/07/21 10:12:11.24 wN4yZ2B5.net
普通のunix処理系wwww
普通てwwwwwwwwwww
こんな曖昧でいい加減な単語を使って反論になると思ってんのかwww
こんな客観的数値も示せない思い込みが根拠になるなら
普通の人間はPerlなんざ使わねーよwwwwwwwww
普通の人間はなwwwwwwwwwwwwwwwwwwwwwww

333:デフォルトの名無しさん
16/07/21 14:22:48.08 +jQ9eKqj.net
perl-5.24.0.tar.gz 開いて見てみたけど
ソースはC言語で書かれているんだよね
作った人は「自分で作って下さい」を実行したんだろうね

334:デフォルトの名無しさん
16/07/22 00:54:29.43 ak+a/2Hs.net
文字を扱うのは人間。Perlが扱っているのは文字コードな。

335:デフォルトの名無しさん
16/07/22 02:53:58.61 jSbimIDf.net
>>318
post/getがよしなにスーパーグローバル変数(笑)に入ったり
何もしなくてもエラーがブラウザで見られたり(言語がhttpプロトコルを理解できてる?)
iniファイルで挙動が変わったり
ごく普通のプログラム言語からはかけ離れてるだろ
Javascriptの方がよっぽど普通なんだけどなぁ

336:デフォルトの名無しさん
16/07/22 03:14:36.53 7iYsigKa.net
> post/getがよしなにスーパーグローバル変数(笑)に入ったり
それは10年以上前の話だよw
知識止まってんなぁ。

337:デフォルトの名無しさん
16/07/22 03:31:19.54 jSbimIDf.net
>>332
お前の使ってるナウ(笑)なPHPはquerystringに値いれてもvar_dump($_GET)するとnullなの?
言語って10年経とうが根本的な部分はそうそう変わんないだぜ

338:デフォルトの名無しさん
16/07/22 04:41:07.53 7iYsigKa.net
>>333
Perlでは グローバル変数$ENVの$ENV{'QUERY_STRING'} に
querystringが入るけど、それと何が違うん?

339:デフォルトの名無しさん
16/07/22 09:01:23.54 jSbimIDf.net
>>334
それはCGIとかがquerystringを環境変数へセットしてるだけであって(postは標準入力)
環境変数や標準入力、argsを読む機構はperlに限らずどの言語で備えてるでしょ。
デリミタも指定せずname[]のようなオレオレ仕様で勝手に解釈して予め変数に入れるのを
言語のレイヤーで行うのはphpぐらいしか思いつかない。

340:デフォルトの名無しさん
16/07/22 09:13:02.54 7iYsigKa.net
>>335
え?「思いつかない」ってだけ?w

341:デフォルトの名無しさん
16/07/22 09:14:42.73 DCfhc9fh.net
PHPの話してる時点でズレてるとは思わんのかね

342:デフォルトの名無しさん
16/07/22 13:21:21.28 9lWfzFCE.net
いきなりなんの前触れもなかったし、何言ってんだ?と思ったら、PHPのdisりかよ。
知らんがな…

343:デフォルトの名無しさん
16/07/22 14:07:48.50 jisYPSD0.net
>セットしてるだけ
だけw

344:デフォルトの名無しさん
16/07/22 14:50:50.79 jisYPSD0.net
言い訳が苦しくなってくると、最後に「だけ」を付加するPerl厨
窃盗犯が「ちょっと借りただけだろ」と言い訳するのと同じ
犯罪者と同じ思考パターンを有するPerl厨
ちなみに犯罪者と同じ思考パターンを持つヴァカがPerlを選ぶのか
Perlを使ってるうちに犯罪者と同じ思考パターンを持つようになるのかは不明
どちらにせよPerl厨はヴァカで犯罪者予備軍ということに変わりはない
まともな人間はPHPを選ぶ

345:デフォルトの名無しさん
16/07/22 19:55:10.85 d984b3j7j
Perlと同程度に時代遅れなPHPを出してくる辺りが面白い。
2chという時代遅れな掲示板に、これからも、ずっと変わらずに居て、PHPを推し続けるのだろうな。

346:デフォルトの名無しさん
16/07/22 22:02:06.14 ZdAo90QB.net
今時仕事にも趣味にも役に立たないPHP選ぶバカはいないだろ

347:デフォルトの名無しさん
16/07/22 23:10:31.36 jSbimIDf.net
>>336
php以外の該当する言語を一つあげるだけで完全に論破できるチャンスだよ!

348:デフォルトの名無しさん
16/07/22 23:38:00.41 SRU6z2ZT.net
はいはい。犯罪者予備軍ね。NGにしときますわ。
やりたいことやりたい人は処理系にこだわりはないのにアホか。
コード書けない中学生がVBよりVCと言ってるのと変わらんわ。

349:デフォルトの名無しさん
16/07/23 01:01:50.42 tWjtYIW6.net
>>343
逆だろ?
PHPが他の言語と一緒だということを証明するために
他の言語でもあるような機能を言う。
PHPは他の言語と同じであることを示すことが、正しい論破の仕方だ。
PHPは「他の言語+αの機能」であるという事実に対して
それと同じものを出すことで、何を論破することになるのか?

350:デフォルトの名無しさん
16/07/23 02:01:49.49 bOUqJlZz.net
そろそろ邪魔くさくなったから消えてほしい
劣等感のかたまりは迷惑関係なく必死で長所をアピールしはじめるってね
適切なスレでやってくれんかね

351:デフォルトの名無しさん
16/07/23 02:30:45.09 Z+5onCph.net
嫌なら見なければいいのに
他人にあっちいけとか指示する池沼っているよな。
自己中心的な池沼のお手本。

352:デフォルトの名無しさん
16/07/23 08:35:47.91 rC+TU0A1.net
他プロセスでファイルをopenしているときにそのファイルをrenameしようとすると
renameできないみたいだけどうまくrenameする方法は?

353:デフォルトの名無しさん
16/07/23 10:06:58.15 I+uJVTmO.net
close

354:デフォルトの名無しさん
16/07/23 11:14:44.62 rC+TU0A1.net
>>349
それだとopenとcloseする間にrenameが割り込むとだめ
そこで自分で方法を考えました
まずディレクトリにaccess_kinshi.datというファイルを作ります
このファイルが存在している間は他プロ


355:Zスでこのディレクトリにあるファイルは全てアクセスできないものとする そしてディレクトリ内にあるファイルを全てrenameする そのあとaccess_kinshi.datファイルを削除すればいいということです



356:デフォルトの名無しさん
16/07/23 11:20:06.22 I+uJVTmO.net
前提条件が変わってますけど

357:デフォルトの名無しさん
16/07/23 15:21:23.54 bOUqJlZz.net
他のプロセスってなに?
どっちもPerlで自分の作った物なら、ファイルロックでも使うと良い。
自動待機してくれる

358:デフォルトの名無しさん
16/07/23 19:27:38.24 IQFGkMCr.net
後方参照で教えていただきたいことがあります。
A 80 90
(空白の部分はタブかスペース)
と書いてあるファイルの80とか90の部分を書き換えたいのです。
perl -pe 's/^([A-Z])(\s+)([0-9]{2})(\s+)([0-9]{2})/$1$2$3$4$5/' file で
マッチした部分を参照できるのはわかっているのですが、この場合$3の「80」を「1」にするには
どのような方法をとればよいでしょうか?
perl -pe 's/^([A-Z])(\s+)([0-9]{2})(\s+)([0-9]{2})/$1$21$4$5/' file とすると
$21と解釈されるようで結果がA 90となってしまいます。

359:デフォルトの名無しさん
16/07/23 19:32:51.24 sc8oJJPG.net
シェルスクリプトと同じで、{} で変数名を明治する。
/${1}${2}1${4}${5}/

360:デフォルトの名無しさん
16/07/23 19:41:00.25 IQFGkMCr.net
>>354
出来ました!!
{}で囲むのは思いつかなかったです。

361:デフォルトの名無しさん
16/07/23 20:22:22.12 rC+TU0A1.net
>>352
他プロセスとは同じプログラムを複数で同時実行したやつです
それとファイルロックだとディレクトリにあるファイル1つ1つにロックしなきゃならないので
ディレクトリにあるファイル全てにアクセス禁止するために
アクセス禁止用ファイルを作りました

362:デフォルトの名無しさん
16/07/23 20:22:25.35 erGYoQ8z.net
スクリプトを動かすときは、「動きますように」と昭和する。

363:デフォルトの名無しさん
16/07/23 20:41:29.11 KzTkH9Ph.net
自分で考えているというのは大変良いことだと思うけど、聞きたいことがあるなら
環境くらいは書いてくれないと……
それに、使用中のファイルを rename することの何が問題なのかさっぱり解らない。
まず、何をするプログラムなのかを書いた方がいいと思うよ。

364:デフォルトの名無しさん
16/07/23 22:25:30.57 rC+TU0A1.net
a

365:デフォルトの名無しさん
16/07/23 22:36:22.09 rC+TU0A1.net
なんか書き込こもうとするとエラーが出て書き込めないわ

366:デフォルトの名無しさん
16/07/23 22:48:53.55 rC+TU0A1.net
ようするに
てすと1シージーアイ
OPEN(IN、”あああ.DAT”);
すりーぷ(5);
cLOSE(IN);

てすと2シージーアイ
リネーム(”あああ.DAT”、”AAA。DAT”);
これを同時実行してもリネームはできなかったってこと

367:デフォルトの名無しさん
16/07/23 22:51:17.71 rC+TU0A1.net
同時実行って言ったけど先にてすと1の方を起動して5秒以内にてすと2を起動です

368:デフォルトの名無しさん
16/07/23 23:18:44.54 eYAwBGPh.net
他のプロセスが開いているファイルを、更新できるわけないだろ
2つのプロセスで、ファイル共有できるのは、read & read、の組み合わせだけ。
read & write, write & read, write & write は、共有できない

369:デフォルトの名無しさん
16/07/23 23:40:01.25 sc8oJJPG.net
>他のプロセスが開いているファイルを、更新できるわけないだろ
何を前提に話してんだ?
更新出来るから、ファイルロックなぞの方法が開発されたんじゃねーの?
$ for i in 1 2 3 4 5 ; do
> perl -le 'open my $f, q{>>}, q{foo.txt} ; print $f q{foo} ; sleep 2' &
> done
$ cat foo.txt
foo
foo
foo
foo
foo

370:デフォルトの名無しさん
16/07/23 23:51:16.68 tWjtYIW6.net
>>364
更新 ”できないようにする" から
ロックなんだよ。アホかw

371:デフォルトの名無しさん
16/07/23 23:55:37.22 sc8oJJPG.net
>>365
ん?
(デフォの状態では)更新出来るから、
(更新出来ないようにするための)ファイルロックなぞの方法が開発されたんじゃねーの?
ってレスだったんだが、、、

372:デフォルトの名無しさん
16/07/24 00:40:44.17 9mJaMPLw.net
更新できるのは、同一プロセス内のマルチスレッドだろ
だから、マルチスレッド・プログラミングは難しい

373:デフォルトの名無しさん
16/07/24 01:05:08.31 IyAH6Xir.net
ファイイルロックのモードは2より5のノンブロッキングの方が軽いですか?

374:デフォルトの名無しさん
16/07/24 01:16:29.25 p8SJSbCV.net
>>368
軽いかどうかで決めるんじゃない。
それが必要かどうかで考えろ。
ホント頭が悪いやつは、軽いかどうかの基準しか
持ち合わせてないんだよな。

375:デフォルトの名無しさん
16/07/24 02:10:22.95 8SIezcUV.net
上の2行は頭いいように見えたが
下の2行でホントに頭が悪い人だと思った。
誹謗癖はやめようね。嫌われるよ。というかすでに嫌われてると思うけど。

376:デフォルトの名無しさん
16/07/24 02:12:06.72 p8SJSbCV.net
>>370
正しいのか間違っているのかをいえよ。

377:デフォルトの名無しさん
16/07/24 03:52:51.83 9mJaMPLw.net
ノンブロッキングは、Node.js などが並行処理で、リクエストを受け付ける場合に使う。
こういうのは、プロ中のプロが使うもので、プログラムも順序通りには進まないから、
プログラミングが極めて難しい(イベントドリブン)
初心者は、ブロッキングを使え。
プログラムは一本道で、順序通りに進む

378:デフォルトの名無しさん
16/07/24 04:07:39.30 p8SJSbCV.net
※ただしマルチタスクOSじゃない場合に限る

379:355
16/07/24 10:28:35.84 K5Ja97DP.net
>>361
少なくとも Linux では問題なく rename できるよ。
rename できないというのはシステムコールのマニュアルに書いてあるの?
テストのやり方に問題は無かったの? こんなふうに同期させた方がいいと思うんだけど。
URLリンク(ideone.com)

380:デフォルトの名無しさん
16/07/24 22:44:38.60 IyAH6Xir.net
このようにflockをネストするのは問題ありますか?
open(IN, "< $datafile");
flock(IN, 1);
open(IN2, "< $datafile2");
flock(IN2, 1);
close(IN2);
close(IN);

381:デフォルトの名無しさん
16/07/25 18:20:04.46 tVy4ghQr.net
>>374
windows環境だけどopen中のファイルのrenameはできなかった
例えばtestディレクトリがあって、プロセスAでtestディレクトリにあるファイルのrenameやファイルの作成、
プロセスBでtestディレクトリを削除するとした場合
testディレクトリにファイルが残っているとrmdirが成功しないのでtestディレクトリを削除できない
unlinkでtestディレクトリのファイルを全て削除してからtestディレクトリを削除しようとしても
その間にプロセスAでファイルが作成された場合ディレクトリを削除できない
だからディレクトリそのものをロックしたいっていうこと

382:デフォルトの名無しさん
16/07/26 08:16:09.27 Yl3q3y9J.net
>>375
問題ない

383:デフォルトの名無しさん
16/07/26 13:18:10.17 0CGOQrnU.net
>>376
そういうことを先に書いてくれないと……
そうか、Windows ではできないのか……
プロセスAの処理が終わるまでプロセスBを待たせておきたいということなら
普通に mkdir でどうでしょう。可搬性も高い排他制御の定番です。

384:デフォルトの名無しさん
16/07/26 13:54:47.54 M5KaPrwS.net
>>376
File::Path -> remove_tree
URLリンク(search.cpan.org)

385:デフォルトの名無しさん
16/07/26 18:01:31.91 0CGOQrnU.net
何が目的でそのための何をしている状況なのかというのがいまだに理解できないんだけど、
そもそもそんな状況にしないやり方を考えた方がいいのかもしれない。
どうしても排他制御が必要なら例えばデータベースを使うというのは Windows でも出きると思う。
Windows のことは知らないからこれ以上はお役に立てそうに無い。

386:デフォルトの名無しさん
16/07/27 02:23:44.17 8IadtePG.net
簡単に言うとディレクトリをmkdirで削除したいけど
削除しようとしている間にディレクトリ内にファイルを作られるとmkdirできなくて削除できないので
ディレクトリ内にファイル作成もディレクトリ内のファイル読み込みも禁止にしたかったってこと

387:デフォルトの名無しさん
16/07/27 02:26:13.90 8IadtePG.net
mkdirじゃなくてrmdirだ

388:デフォルトの名無しさん
16/07/27 08:10:16.74 yPkdt5ig.net
任意のプロセスがアクセスできるディレクトリを削除したいという要求自体が間違っている

389:デフォルトの名無しさん
16/07/27 08:32:01.24 8IadtePG.net
>>383
bbsディレクトリの中に各掲示板ごとのディレクトリがあって、さらにその中にログファイルや掲示板設定ファイルがある
削除したい掲示板は各掲示板のディレクトリごとに削除するしかないのでどうしても任意のプロセスがアクセスできる
ディレクトリを削除するしかない
test1掲示板の場合
ファイルはbbs/test1/logfile.datとbbs/test1/settei.datがあって
掲示板を削除する場合はまずこの2つのファイルを削除してtest1ディレクトリを削除するということです

390:デフォルトの名無しさん
16/07/27 09:49:12.77 uNHlpX2c.net
その掲示板とやらのディレクトリは本当に、自分のプロセスだけでなく任意のプロセスからもアクセスできるのか?
であれば、ディレクトリのパーミッションが間違っている。自分のプロセス以外のアクセスを禁止せよ。
自分のプロセスしかアクセスできない前提であれば、好きなように自分で排他制御を行えばよい。例えば>>378のように。

391:デフォルトの名無しさん
16/07/27 15:57:37.43 8IadtePG.net
>>385
普通の掲示板やで
普通掲示板は誰でも観覧と書き込みができるので任意のプロセスからでも読み書きできる
それとディレクトリの削除はブラウザからperlで書いたcgiを起動して削除するので
パーミッションでのオーナーとかの判別はできないんや

392:デフォルトの名無しさん
16/07/27 16:17:33.22 uNHlpX2c.net
掲示板のcgiが動いてるプロセスは掲示板を閲覧しているユーザとは関係なかろうが。
これ以上はperlの話ではなく、そのcgi固有の話だ。
ここでやる話ではない。

393:デフォルトの名無しさん
16/07/29 21:21:45.34 kdSSWeOo.net
my(@aaa);
@aaa = sort {$b <=> $a} @aaa;
このとき$a,$bをmy($a,$b)やlocal($a,$b);と宣言するとエラーになります
$a,$bはどのように宣言すればいいんですか?

394:デフォルトの名無しさん
16/07/29 22:20:02.88 lqBNaMPB.net
aとbはあらかじめ用意された特殊変数。
特殊変数は全部グローバル変数

395:デフォルトの名無しさん
16/07/30 00:48:59.27 pBzYHnSl.net
>>381
他のプロセスに使われる前にディレクトリ名をランダムな名前に変更
するとよい。変更後に rmdir する。

396:デフォルトの名無しさん
16/07/30 08:47:55.59 k05zeajW.net
1:投稿ファイルをロックして書き込み
2:投稿数ファイルをロックして書き込み
1の排他ロックが成功して2の排他ロックが失敗してタイムアウトになり書き込みできなかった場合
投稿数が実際の投稿より少なくなりが整合性がとれなくなる
この場合下記のようにまとめてロックするのが普通?
まとめ排他ロック
1の処理
2の処理
ロック解除

397:デフォルトの名無しさん
16/07/30 09:56:42.41 0Jkia02i.net
>>391
そういう場合はまとめた単位でロックを取ることが多い
あるいはロールバックできるようにするしかないけど、それはたいてい難しい

398:デフォルトの名無しさん
16/07/31 09:21:12.12 9W15s1XM.net
1:投稿ファイルをロック
2:投稿数ファイルをロック
3:投稿ファイルを書き込み
4:投稿数ファイルを書き込み
5:投稿ファイルをアンロック
6:投稿数ファイルをアンロック

399:デフォルトの名無しさん
16/07/31 14:54:33.71 V3GimjB6.net
PostgreSQLのTIMESTAMP形式の文字列を秒数(Perlのtime関数で取得したような状態)に直す関数教えて

400:デフォルトの名無しさん
16/08/02 23:49:48.17 C1WIu1+e.net
use DateTime::Format::Pg;
print DateTime::Format::Pg->parse_datetime( '2016-08-21 23:50:01' )->epoch;

401:デフォルトの名無しさん
16/08/05 00:01:27.27 RLQt/Rjs.net
>>393
それだとロックの間に隙間ができる

402:デフォルトの名無しさん
16/08/05 00:02:57.68 RLQt/Rjs.net
実行時間が0.15秒から0.2秒のperlスクリプトは重い部類ですか?

403:デフォルトの名無しさん
16/08/05 00:22:53.93 /+BaQz+x.net
>>393
データとは別にロック中か識別するためだけのロックファイルまたはディレクトリを用意するものなんじゃないの?>>392のように

404:デフォルトの名無しさん
16/08/05 09:40:54.31 rvcc+G4N.net
1:投稿数ファイルをロック
2:投稿数ファイルを書き込み
3:投稿数ファイルをアンロック
4:投稿ファイルをロック
5:投稿ファイルを書き込み
6:投稿ファイルをアンロック
じゃだめなのかな。

405:デフォルトの名無しさん
16/08/05 09:49:56.50 iMQ1FKDS.net
それ投稿数と投稿が連動してないやん
ロック
必要な書き込み全部
ロック解除
が普通

406:デフォルトの名無しさん
16/08/05 17:58:59.50 rvcc+G4N.net
それは「普通」というより「手抜き」だね。最初はそれでいいと思うけど。

407:デフォルトの名無しさん
16/08/05 21:06:28.92 n2C4Ao5J.net
>>401
普通じゃなくて天才だよ。
完璧な答え。

408:デフォルトの名無しさん
16/08/05 21:06:53.73 n2C4Ao5J.net
>>399
だめ。それはバグ。

409:デフォルトの名無しさん
16/08/06 00:52:14.83 aSfsFG4F.net
まあ質問の直後にいきなり答えが書いてある
それを分からないのが混ぜ返してるだけだ
>>391-392

410:デフォルトの名無しさん
16/08/06 07:58:04.15 nmoqGXlF.net
(書き込み時)
1:まとめロックようファイルを作る
2:まとめロック用ファイルを排他ロックする
3:投稿ファイルにを投稿を書き込む
4:投稿数ファイルに投稿数を書き込む
5:まとめロックの解除
(観覧時)
1:まとめロック用ファイルを共有ロックする
2:投稿ファイルを読み込んで表示する
3;投稿数ファイルを読み込んで表示する
4:まとめロックを解除
これが正しい

411:デフォルトの名無しさん
16/08/09 01:43:06.25 s2zPwIrc.net
>>396
何のために数字が振ってあるのか分かる?

412:デフォルトの名無しさん
16/08/09 02:52:34.66 d2ilw35z.net
なんのため?
プロセス間の整合を取るのにプロセス内の順序は全く意味ない数字と思うけど。
うーん、なんのためだろ?教えてくれないかな?

413:デフォルトの名無しさん
16/08/09 22:13:03.27 zWs+JfAu.net
> プロセス内の順序は全く意味ない数字と思うけど。
え? 順番を入れ替えても同じなると思ってるの?
例えば5 → 1 → 4 → 3 → 2 → 6 の順番で
実行しても同じ結果になると?
ロックの話以前に、あんたが何が言いたいのかわからない

414:デフォルトの名無しさん
16/08/09 23:09:59.97 d2ilw35z.net
んでなんのため?
あと関係ない話しかしてないようだけど、同じになるって情報はどこから?
そしてその話になんの意味があると思い込んでますか?

415:デフォルトの名無しさん
16/08/09 23:36:26.59 zWs+JfAu.net
> んでなんのため?
順番が重要だからだろ。

416:デフォルトの名無しさん
16/08/09 23:38:43.66 zWs+JfAu.net
>>393が書いてあることは正しくて、
この順番通りの処理をすると不整合が起きない。
重要なのは書き込みを行う前に書き込むファイルすべてを
ロックする


417:ニいうこと。最初にまとめて行う。 こうすることでロックの間に処理が割り込まれず 正しく書き込むことができる。



418:デフォルトの名無しさん
16/08/09 23:45:04.85 d2ilw35z.net
ここまで正しい回答が何度も出てるのに、そのあとから間違った回答を自身満々にするのもすごいと思う
ロックは常にプロセス間の整合のみ取るべし

419:デフォルトの名無しさん
16/08/09 23:54:26.10 d2ilw35z.net
ごめん。外部仕様としてはこの場合正しかった。
内部的にはやってはいけないお手本のような無意味なロックがされてて、それで勘違いした。すまんかった。

420:デフォルトの名無しさん
16/08/10 08:11:51.04 UJ0StgLg.net
いいってことよ

421:デフォルトの名無しさん
16/08/13 09:19:35.74 Y2Ng1HRN.net
確かにロックはプロセス間通信の一種で使う技術も同じか
こうゆうのはスクリプトをプログラムと思ってる人と、プログラムの基礎的な部分から学んだ人とでは差が出そうだね

422:デフォルトの名無しさん
16/08/22 20:05:32.69 2GCPiaHi.net
windows7で文字化けファイル名を取得するとショートファイルで得られるようですが、
ロングファイルのビットの並びをそのまま得たいです。
指定して得るにはどうすれば良いでしょうか?
ちなみにDOSなどでのコマンドは知っています。

423:デフォルトの名無しさん
16/08/22 23:45:40.07 vzm1zF9k.net
`dir /b *.*`
次スレのテンプレに追加するから

424:デフォルトの名無しさん
16/08/23 00:01:48.07 GgtizVRn.net
コマンドじゃなくてPerlでどうにかしたいのだけど

425:デフォルトの名無しさん
16/08/23 02:38:12.51 a3VZWpnc.net
バッククォートの意味が分からないのかな

426:デフォルトの名無しさん
16/08/23 07:59:22.61 GgtizVRn.net
コマンドだろ

427:デフォルトの名無しさん
16/08/23 22:48:28.92 evJ0lXFt.net
my @file = split(/\n/,`dir /b *.* 2>NUL`);
# あとは夏休みの宿題、な

428:デフォルトの名無しさん
16/08/24 08:59:06.43 hHpNATWD.net
すまん、回答してるつもりだろうけど、頭悪い人に用はないんだ。
わざわざ何度も書いてる様だが、一番最初に(も)言った通りコマンド使うやりかたはできるから。
あと全レス会話の繋がりもなく、堂々と好き勝手なこと書く人間もしんどい。

429:デフォルトの名無しさん
16/08/24 12:35:26.35 CgBgF68oI
URLリンク(search.cpan.org)

などと挙げてみたものの、あまり信用できないモジュールだな、これ。

430:デフォルトの名無しさん
16/08/24 20:30:09.76 fxHMMLTZ.net
いや、君の記述能力が頭悪いんだよ。
流行の言葉で言うとコミュ力やプレゼン力がない。
コマンド知ってますなんて言い方じゃ伝わらない。
少しは自分の不徳を省みたらどうか。

431:デフォルトの名無しさん
16/08/24 20:38:10.41 W4vM/rXO.net
再現出来る環境無いんだけどWin32::GetLongPathNameはどうかな

432:デフォルトの名無しさん
16/08/24 20:59:49.53 jqqoh+mK.net
これは知ってるかい?→ <*>

433:デフォルトの名無しさん
16/08/24 23:20:14.12 hHpNATWD.net
>>426
すまないがそれでは得られる文字は同じで、文字化け文字にはショートが適用されます。
おそらくwindowsに対するアプローチを変えないとだめだと思うのです。
>>425
いけたよありがとう。
API叩いてやりくりしてたけど、暫定的にそれを使わせてもらうよありがとう。
windowsは外部的にもさっさとunicode使ってほしいと思う。

>>424
その無駄な4行必要か?なんか書きたいなら頑張って回答書けば?(俺としては書かないで頂きたいけどな)

434:デフォルトの名無しさん
16/08/24 23:31:21.73 jqqoh+mK.net
まあとにかく特殊な環境なんだね。もう少し前提条件を書いたほうが早く欲しい回答を得られたと思うよ。
>>4


435:16の書き方じゃ>>424に文句を言う筋合いはないよ。



436:デフォルトの名無しさん
16/08/29 17:11:38.79 x3G6j3++.net
どうでもいいけど特殊な環境じゃなくてwindows標準の仕様かと

437:デフォルトの名無しさん
16/08/29 21:33:30.70 NQxKIK4Q.net
文字化けが問題なんだろうね

438:デフォルトの名無しさん
16/08/29 21:40:22.45 x3G6j3++.net
なぜ化けるのか、と言う話だ
CP932とunicodeが混在してる場合はどうすりゃいいですかって話じゃね

439:デフォルトの名無しさん
16/09/01 19:27:50.30 vCLh7LOG.net
ココ参考にして URLリンク(hirobanex.net)
こういう呼び出ししても
$teng->sql_builder->load_plugin('InsertOnDuplicate');
$teng->sql_builder->insert_on_duplicate(略)
Can't locate object method "insert_on_duplicate" via package "Teng::QueryBuilder"
で呼べないんだけどどうしたらいい?

440:デフォルトの名無しさん
16/09/01 19:29:20.37 vCLh7LOG.net
ちなみに
__PACKAGE__->load_plugin('+SQL::Maker::Plugin::InsertOnDuplicate');
でもダメ

441:デフォルトの名無しさん
16/09/01 20:39:24.43 0j1lNnbm.net
ブログ記事じゃなくてPOD読めよ

442:デフォルトの名無しさん
16/09/01 22:35:57.18 vCLh7LOG.net
PODに別パッケージから plugin生やす方法なんて書いてないでしょ

443:デフォルトの名無しさん
16/09/03 20:53:36.76 pSsdJ5JF.net
マジレスするなら、
別の方法で呼べるか試してみる
何が起こっているのか調べてみる
ってところか。

444:デフォルトの名無しさん
16/09/09 12:53:46.35 JRjUoSNq.net
何を調べたらいいのかわからんので手が付かない

445:デフォルトの名無しさん
16/09/09 13:05:29.57 JRjUoSNq.net
はっきりしてるのは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(略)

446:デフォルトの名無しさん
16/09/09 16:12:29.13 yxgmGddx.net
もう直接コード読めよ

447:デフォルトの名無しさん
16/09/09 16:58:05.37 yxgmGddx.net
$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クラスを用意するか
>>433
この__PACKAGE__はどこに書いたんや?__PACKAGE__の意味わかってる?

448:デフォルトの名無しさん
16/09/09 17:40:55.04 iPoh5J1m.net
もう、馬鹿過ぎて哀れだ。実際にやりたいことは
*SQL::Maker::insert_on_duplicate = \&SQL::Maker::Plugin::InsertOnDuplicate::insert_on_duplicate;
ってことでしょ? もうこれでいいでしょ。POD すら読まないんじゃ助けようがないよ。

449:437
16/09/10 11:47:34.76 VYsCJTGt.net
ごめん、言い過ぎた。とりあえず、正解が分らない段階で俺ならどうするかを書くよ。
まず、何をしているのかを 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 を差し替えて動作を詳しく調べる。

450:デフォルトの名無しさん
16/09/10 18:20:16.29 1M4Sozo+.net
Tengを使うのかどうか自分で選べるのなら、自分が理解していないものを使わないという選択肢がある。
他の人が選んでしかも使わなければならないという状況なら、選んだ人にどう使うのかを聞くといい。

451:デフォルトの名無しさん
16/09/10 19:19:33.59 7Wlp4jMr.net
多分ブログ書いた人やその人に教えた人はTeng本体と混ざって勘違いしたんだろうな
Teng自体はインスタンスからもロードできるから

452:デフォルトの名無しさん
16/09/13 17:44:13.57 AYCTTYgO.net
この記事、オレオレメモだって自分で書いてるからわざわざつっこむのも野暮だけどOR検索の例もちょっとひどい。
どうしてこうなった?

453:デフォルトの名無しさん
16/09/22 14:09:25.16 ULuG4eTB.net
Windows の Strawberry Perl で、「Parallel::ForkManager」は使えますか?
----------------------------------------
use LWP::Simple;
use Parallel::ForkManager;
...
@links=(
["URLリンク(www.foo.bar)
["URLリンク(new.host)
...
);
...
# 最大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」エラーを出しまくりますが、
メモリを全消費する事はありません(異常終了もしません)。

454:デフォルトの名無しさん
16/09/22 15:02:46.45 EZPik98J.net
windowsのForkは、表面上は同じように動作する仕様になっているが、
実際にプロセスやスレッド、CPUの動作が期待通りになってるかと言うとそれは違う。
ほとんどの場合が、unixとの互換性を保つための見せかけ。

455:デフォルトの名無しさん
16/09/22 16:23:36.65 PQbGo3UU.net
rulezの綴りがzの辺り、悪さしてそうだな

456:デフォルトの名無しさん
16/09/23 01:08:30.38 Ay1vA5a9.net
if($hoge=~/(\d+)$hoge3$/){$hoge2=$1}
これの意味は
$hoge3が数字のみなら$hogeに代入し、$hoge2にも代入するという意味でしょうか?

457:442
16/09/23 05:21:37.52 CNgCRT2E.net
>>447
「WindowsのFork」の意味は分かりませんが(Windows用PerlのFork?)、
Cygwin の perl は、
  C:\cygwin64\bin\bash --login -i -c "perl ...
等としなくても、Windows から直接起動出来るので、
あのスプリクトで直接起動しても、メモリエラーは出ませんでした。
Cygwin の perl を、Strawberry Perl の代わりに、、、と思ったら、



458:ォなり chomp が、CR+LF を削除してくれなかった。 >>448 perldoc.jp からのコピペです。 >>449 if ( 文字列 =~ /パターン/ ) もし「文字列」の中に「パターン」が含まれていれば、 if ( $hoge =~ /(\d+)$hoge3$/ ) { $hoge2 = $1 } もし「 $hoge 」の中に「 \d+$hoge3$ 」が含まれていれば、「 $hoge2 」に「 \d+ 」を代入



459:445
16/09/23 08:03:28.29 Ay1vA5a9.net
>>450
ありがとうございます。
他言語の底辺SEなので助かりました。

460:デフォルトの名無しさん
16/09/23 14:09:14.63 eBfGtRhY.net
普段それを読む文化にない人がいきなり読めたら逆にすごいと思う
PerlってPerlが分かる人だけの言語

461:デフォルトの名無しさん
16/09/26 17:38:36.14 ak8zLIw0.net
Perl on Bash on Ubuntu on Windows10 での、
モジュールのインストールで、無駄に苦労した。
  解決法: Config.pm の修正

Windows10 のコマンドプロンプトでも、
エスケープシーケンスが使えるらしい。
  PROMPT $E[96m$T$E[3D $E[93m$P$G$E[37m$E[1C
懐かし

462:デフォルトの名無しさん
16/09/28 02:39:45.69 sK8+jqCL.net
ソースはサンプルコードな

463:デフォルトの名無しさん
16/10/03 14:01:12.25 OUfpKV3+.net
C:\> prompt $e[1;36m[$d$s$t$h$h$h] $e[1;33m%USERNAME%@%COMPUTERNAME% $e[37m$p$_$g$s

464:デフォルトの名無しさん
16/10/03 19:32:24.04 tI+B9pP0.net
ザメフォン元気?

465:デフォルトの名無しさん
16/10/06 18:37:40.82 fMpg74pi.net
ビット演算を多用したいんだけど、変数のサイズを指定したい。longとか。
とりあえず、16bitと32bitと64bitの整数が欲しい。
あと数値と文字が勝手に切り替わらないようにしたい。
ビット演算してるブロックだけでいいんで。
あと環境の保証も欲しい。どのマシンでどのbitのPerlとか関係なく。
俺が32bitのビット演算って言えばそれはもう絶対32nit演算。
もちろん不当に遅くなる方法は許さない。

466:デフォルトの名無しさん
16/10/06 20:14:48.16 rUXrZJG3.net
C で書け。

467:デフォルトの名無しさん
16/10/06 20:56:23.24 Wdgc44Vq.net
C++でもいいぞ

468:デフォルトの名無しさん
16/10/06 21:07:21.59 ZdOAOk1u.net
rubyで十分

469:デフォルトの名無しさん
16/10/06 21:31:39.42 fMpg74pi.net
Cとかでもいいけどdllの使い方分からないのだ

470:デフォルトの名無しさん
16/10/07 03:14:09.37 hiGL0oI+.net
URLリンク(perldoc.jp) でOK

471:デフォルトの名無しさん
16/10/07 07:25:20.66 codMUtxm.net
vec かな。それでも不満なら perlfaq3 を読んで C で書け。

472:デフォルトの名無しさん
16/10/07 12:43:21.52 codMUtxm.net
実際に何をして、その結果何が問題だったの? そのくらいは書いてくれないと……

473:デフォルトの名無しさん
16/10/08 01:08:43.11 hitB9rm0.net
>>461
xsと言うのがあるが、一時的に値が複製されて良いなら標準入出力(メモリ渡し)のほうが絶対に楽だと思うのだ。
ま、perl使ってるなら複製されたメモリのほうが元のデータより圧倒的に小さいはずだが

474:デフォルトの名無しさん
16/10/08 09:19:23.51 ZgFPdp2t.net
ビット演算したいなら普通にすればいいよ。
◯ビット変数がほしいといわれても、それは適切にマスクすればいいだけだし。
◯ビット変数のように振る舞うものがほしいということなら、Perl は C よりも期待に応えられると思うよ。
まずは C と同じ書き方をして速度を計ってみてよ。話はそれからだ。

475:デフォルトの名無しさん
16/10/08 22:30:15.59 KfBpvv2w.net
はぁ?
~0 この時点で同じになりませんがな

476:デフォルトの名無しさん
16/10/09 00:00:21.79 ja1MeL+I.net
>>457 に言ってるんだよ?

477:デフォルトの名無しさん
16/10/10 16:43:42.37 zhEtfxQ/.net
もう連休終わっちゃうんだけど結局何をしたかったのかな。

478:デフォルトの名無しさん
16/10/11 00:06:06.59 SYi+Wrc4.net
その日のうちに解決したんじゃね?
木曜日の相手になに言ってんだか

479:デフォルトの名無しさん
16/10/11 00:28:33.80 SYi+Wrc4.net
しかし普通の言語やったあとにPerlやると異常なほど即座に短く書き終えるからなにか書き忘れてるんじゃないかと不安になる。
正しく動くと分かると異常なほど楽で嬉しくなるし、C++とかが馬鹿らしくなる。
そして実行速度計ると結局全部納得してため息。

480:デフォルトの名無しさん
16/10/11 19:01:16.50 A+TNY00d.net
stat($file_path);でファイルを作成したtimeは
atime,mtime,ctimeのどれなの?

481:デフォルトの名無しさん
16/10/11 19:50:08.12 Mt8tOIIr.net
>>472
URLリンク(perldoc.jp)
> 8 atime 紀元から、最後にアクセスされた時刻までの秒数
> 9 mtime 紀元から、最後に修正(modify)された時刻までの秒数
> 10 ctime 紀元から、inode 変更(change)された時刻までの秒数 (*)
> 明らかに、ctime のフィールドは移植性がありません。
> 特に、これから「作成時刻」を想定することは出来ません
URLリンク(perldoc.jp)
> ファイルシステムはアクセスタイムスタンプや変更タイムスタンプに
> 対応していないかもしれません (つまり移植性のあるタイムスタンプは
> 変更タイムスタンプだけです); またタイムスタンプは 1 秒単位では
> ないかもしれません (例えば、FAT ファイルシステムは時刻の単位は
> 2 秒単位です)。
>「inode 変更タイムスタンプ」 (-C ファイルテスト) は (Unix 以外では)
> 実際には「作成タイムスタンプ」かもしれません。

482:デフォルトの名無しさん
16/10/12 08:39:20.39 9k51B2Do.net
Perlのオブジェクト指向読んだばっかりで理解が曖昧なんだけど、
これだと、オブジェクトがオブジェクトなのか関数なのかって呼び出し側で決める事にならない?
コンストラクタもメソッドも。
ついでに、インスタンスのカプセル化どうこうも、呼び出し側の権利?
みたいに見えたのですが。

483:デフォルトの名無しさん
16/10/12 13:04:43.13 kXFNS19K.net
>>474
そうだよ
それはC++等でも同じ

484:デフォルトの名無しさん
16/10/12 14:33:18.63 9k51B2Do.net
>>475
ありがとう
以下みたいな感じの記述は使っても問題ない?
あと穴があった場合も教えて欲しい。
(複数回に分けて書くので途中で書けなくなるかも)

use utf8;
use strict;
use warnings;
#ただの実験
# 1: メソッドとインスタンスをカプセル化する。
# 2: クロージャを、あたかもオブジェクト指向と同じ記法で呼び出せるようにする。(クロージャとオブジェクト指向の同一視)
# 3: クロージャをクロージャのまま使いたければそうできるようにした。そもそもクロージャのほうが速いので。

485:デフォルトの名無しさん
16/10/12 14:33:37.13 9k51B2Do.net
{
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}->(@_);
}
}

486:デフォルトの名無しさん
16/10/12 14:34:03.93 9k51B2Do.net
{
package test;
my $c = Class::new("Closure"); #クロージャとして呼び出すと、一般的な


487:クロージャと同じように使える。 print $c->{NameGet}->() . "\n"; my $o = Class->new("Object"); #オブジェクト指向として呼び出すと、オブジェクト指向と同じように使える。(中身はクロージャ) print $o->NameGet() . "\n"; print Class::NameGet(); #関数のように呼ぶとエラー } __END__ 以上です



488:デフォルトの名無しさん
16/10/12 16:49:58.02 HdFKT2Ip.net
オブジェクト指向=カプセル化ではないし、perl5でももう少しスマートなカプセル化のやり方もあるが筋が悪いからおすすめはしない
perl6はオブジェクト指向に関してはかなりマシだけど、そもそも速度気にするならperlは向かない
perl5じゃないとダメなら規約などで上手く付き合うしかない
ちなみにそのコードだとまともに継承できないね

489:デフォルトの名無しさん
16/10/12 21:51:13.12 9k51B2Do.net
やりかたがあると言うのなら、提示して欲しいのだけど。(ただの俺は知ってるぞ自慢?)
事前に試しましたが、継承はできましたよー。
複数クラスを書くと長くなるので書きませんが、
まったく同じように別のクラスを書いて、ベースにしたいクラスを呼び出して更新すれば
とりあえずインスタンスもメソッドは継承されるですね。
あと穴は一つ発見しました。
これは後出しにしようかな。

490:デフォルトの名無しさん
16/10/13 02:01:07.92 Zro6GxWw.net
こいつは何しに来たんだ?

491:デフォルトの名無しさん
16/10/13 10:53:38.82 O2Ch/Rp5.net
perlでpcアプリケーションって作れますか?

492:デフォルトの名無しさん
16/10/14 12:30:24.58 om26oWOX.net
>>482 作れます。

493:デフォルトの名無しさん
16/10/14 22:56:09.64 GnnBnQfG.net
スーパーコンピューターのアプリケーションしか作ったことがないのですが、
そんな私でも作れるでしょうか?

494:デフォルトの名無しさん
16/10/15 02:02:31.11 UBpH7j9p.net
スパコンのSIMDやMPIの方が楽だから
無理しなくていい

495:デフォルトの名無しさん
16/10/17 02:26:31.41 WRe7I7Bu.net
2つのテキストファイルを比較し、一致した文字列を取り出したいんですが、教えていただけませんか

496:デフォルトの名無しさん
16/10/17 03:43:08.25 sXplblvU.net
一致した文字列を穴なく完璧に厳格に定義して示して下さい。
そしてそれが出来ればプログラミングの8割は終了しています。

497:デフォルトの名無しさん
16/10/17 09:06:26.12 z3YwWHWS.net
diff 系かなあ。CPAN で検索してみるといいよ。

498:デフォルトの名無しさん
16/10/17 09:12:40.23 9EO0+SUA.net
Perl使うまでもないような
cat fileA fileB | sort | uniq -d


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

546日前に更新/269 KB
担当:undef