X



Perlについての質問箱 64箱目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
2019/02/01(金) 09:44:37.18ID:1/Kr4Qjk
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板: https://medaka.5ch.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.28.1)

▼前スレ
Perlについての質問箱 61箱目
http://toro.5ch.net/test/read.cgi/tech/1381561905/
Perlについての質問箱 62箱目
http://toro.5ch.net/test/read.cgi/tech/1385039352/
Perlについての質問箱 63箱目
https://mevius.5ch.net/test/read.cgi/tech/1392820583/
0002デフォルトの名無しさん
垢版 |
2019/02/01(金) 09:44:58.17ID:1/Kr4Qjk
【本】
初めてのPerl 第7版(リャマ)[2018年01月 発行]
https://www.oreilly.co.jp/books/9784873118246/

続・初めてのPerl 改訂第2版 [2013年08月 発行]
https://www.oreilly.co.jp/books/9784873116280/

マスタリングPerl [2009年03月 発行]
https://www.oreilly.co.jp/books/9784873113975/

Effective Perl 第2版 [発売日:2015年02月16日]
https://www.shoeisha.co.jp/book/detail/9784798139814

もっと自在にサーバを使い倒す 業務に役立つPerl [2012年4月11日発売]
http://gihyo.jp/book/2012/978-4-7741-5025-3

モダンPerl入門 [2009/2/10]
https://www.amazon.co.jp/dp/4798119172/
モダンPerl入門 増補改訂版(仮)[2014年1月予定]
http://codezine.jp/book/modernperl2

Perl CPANモジュールガイド [2011/4/8]
https://www.amazon.co.jp/dp/486267108X

【オンラインマニュアル】
最新のドキュメント: https://metacpan.org/release/perl
perldoc.jp: http://perldoc.jp/
perldoc.perl.org: http://perldoc.perl.org/
0003デフォルトの名無しさん
垢版 |
2019/02/01(金) 09:45:16.42ID:1/Kr4Qjk
[少し古めの良書]

プログラミングPerl 第3版 VOLUME 1,2(駱駝)[2002年09月 発行]
https://www.oreilly.co.jp/books/4873110963/
https://www.oreilly.co.jp/books/4873110971/

Perlクックブック 第2版 VOLUME 1,2 [2004年09月 発行]
https://www.oreilly.co.jp/books/4873112028/

Perl ベストプラクティス [2006年08月 発行]
https://www.oreilly.co.jp/books/4873113008/

Perl Hacks [2007年01月 発行]
https://www.oreilly.co.jp/books/9784873113142/

実用 Perlプログラミング 第2版 [2006年03月 発行]
https://www.oreilly.co.jp/books/487311280X/
0004デフォルトの名無しさん
垢版 |
2019/02/01(金) 09:45:35.14ID:1/Kr4Qjk
【日本語、Unicode関連】

Encodeモジュール
https://metacpan.org/release/Encode

第31回 encoding:いつまでもjperlから抜け出せない方に
http://gihyo.jp/dev/serial/01/modern-perl/0031

第32回 Encode:日本語だけ扱えればよいのではなく
http://gihyo.jp/dev/serial/01/modern-perl/0032

perlunifaq - Perl Unicode FAQ
http://perldoc.jp/docs/perl/5.18.1/perlunifaq.pod

perlunicode - Perl における Unicode サポート
http://perldoc.jp/docs/perl/5.12.1/perlunicode.pod

【モジュール】
Search the CPAN - metacpan.org: https://metacpan.org/

【Perl環境構築】
plenv
https://github.com/tokuhirom/plenv

cpanm
https://metacpan.org/pod/release/MIYAGAWA/App-cpanminus-1.7001/lib/App/cpanminus.pm
http://perldoc.jp/docs/modules/App-cpanminus-1.7001/lib/App/cpanminus/fatscript.pod
0005デフォルトの名無しさん
垢版 |
2019/02/01(金) 09:45:51.24ID:1/Kr4Qjk
# [Perl 日本語処理の基礎の基礎]
# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。
# 入出力ともシフト JIS 形式のファイルまたは DOS 窓を想定しています。
# まず、以下の行を先頭に入れて下さい。
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)"; # ※1
use Encode;
# 次に、あなたが実行したい処理の内容を入れて下さい。
$file = 'C:/なんたら/かんたら.txt';
open my $fh, '<', encode("cp932", $file) or die $! ; # ※2
print <$fh>;
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。
# 【注】※1. の行を入れると、DOS 窓への日本語出力は簡便になりますが、
# ソースファイル名に非 ANSI 文字が含まれる場合に die 文の出力が失敗します。
# ※2. OS に渡す文字列(ファイル名,dos コマンドのオプションなど)は、
# この例のように cp932 でエンコードする必要があります。
0007デフォルトの名無しさん
垢版 |
2019/02/02(土) 01:13:45.25ID:ZgweYnRo
Common Gateway Interface
https://ja.wikipedia.org/wiki/Common_Gateway_Interface

Common Gateway Interface(コモン・ゲートウェイ・インタフェース、CGI)は、
ウェブサーバ上でユーザプログラムを動作させるための仕組み。
現存する多くのウェブサーバプログラムはCGIの機能を利用することができる。
CGI は環境変数や標準入出力の扱えるプログラミング言語で扱うことができる。
0009デフォルトの名無しさん
垢版 |
2019/02/03(日) 01:42:34.74ID:72eosYJ+
>>7 perl で書けばperl そのものじゃん。

しかし、perl は終わったな。 python に取って代わられた。
0010デフォルトの名無しさん
垢版 |
2019/02/03(日) 23:38:34.25ID:DVXBklBr
単にCGIで使われるという流行が沈静化しただけだよ。使われている所では使われている。
元からCGI専用言語でもなんでもなくなんでもできるからな。

Python は機械学習で現在流行っているが、それもやがては沈静化するだろう。
かといってなくなることはない。
0011デフォルトの名無しさん
垢版 |
2019/02/15(金) 14:42:35.23ID:bVEZ7wIc
>>6
どういうレベルの質問?
0012デフォルトの名無しさん
垢版 |
2019/02/18(月) 00:23:21.60ID:pGUSPpE4
けっこう大きめのEUCで出来たプログラムを全部utf8に直す作業が始まるんだが、面倒くさいんだが
構成ファイルもたくさんあるし、読み書きしてるようなファイルもたくさんあるし、プラグイン方式みたいに作られてて、既存のプラグイン的なのも全部EUCでutf8に直さなきゃならないんだが

めんどくさいと言うか、正常に動くのかどうか不安なんだが
一応表面上は正常に動いたように見えても、俺にはそれはまやかしに感じるんだが
0013デフォルトの名無しさん
垢版 |
2019/02/18(月) 00:58:26.57ID:pGUSPpE4
はいやっぱりバグったファイルの読み込みが出来なくなった
0014デフォルトの名無しさん
垢版 |
2019/02/18(月) 13:29:31.02ID:trvxFZJG
そういやUTF8だとprintfとかで幅を揃えるのができなくなったりして大変だな。
%-10sとかやっても漢字が入るとそこが出力時に3バイトになったりしてずれて役に立たない。
こういう幅とか考慮してフォーマットしてくれるモジュールあるんだろうか?perlだから誰かが作ってそうではあるが。
0015デフォルトの名無しさん
垢版 |
2019/02/18(月) 15:02:51.14ID:+OgI4mQP
Unicode::GCStringでカラム数とれるっぽいから空白いくつ詰めるかは計算できそう
0016デフォルトの名無しさん
垢版 |
2019/02/18(月) 18:04:58.85ID:pGUSPpE4
かなり頑張ったがUTF8にするのは無理だということになって諦めた
sjisとEUCとutf8が無駄に入り乱れる結果になった
ファイル名はプログラム内部ではEUCで扱ってたり、実際のファイル名はsjisだったり、ファイルの中身はEUCだったり、通信はsjisだったり、
そもそも文字単位じゃなくてバイト単位でデータを管理する記述がめっちゃあったり、
ゴミかよ!
0017デフォルトの名無しさん
垢版 |
2019/02/18(月) 20:51:52.45ID:trvxFZJG
一生を掛けて修復するプログラムになったようだな。
0018デフォルトの名無しさん
垢版 |
2019/02/18(月) 20:52:30.58ID:trvxFZJG
>>15
おお。ありがとう。やはりあったか。
0019デフォルトの名無しさん
垢版 |
2019/02/26(火) 09:36:37.24ID:DhIH/rsp
$str = "abcdefg"; open( $fh,"<",\$str); open( $fh2,"<&",$fh);
はできるけど
open( \*STDIN,"<",\$str)
open( \*STDIN,"<&",$fh)
はできないんだな。知らなかった。"Bad file descriptor" って言われた。
どこかに書いてあったっけ?
0020デフォルトの名無しさん
垢版 |
2019/02/26(火) 18:47:18.00ID:vB+znWqX
ちょっとマジで聞きたいことがあるんだが、cgiからブラウザに対してCP932でHTMLが出力されている。
もちろんヘッダも正しく指定されている。

んで、そのHTMLの中に、
<IMG SRC="あいうえお.jpg"> などと言う日本語のファイルが指定されているわけだ。
その日本語のファイル名も、CP932だ。

んで、ご丁寧にブラウザが自動でURLエンコードしてくれるようなのだが、
%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A.jpg
となるのだ。これは "あいうえお.jpg" をUTF-8として解釈した時の文字コードだ。
俺としては %82%A0%82%A2%82%A4%82%A6%82%A8,jpg (CP932の文字コード)となってもらわなくては困る。

聞きたいことは2つで、これを解決するにはどうしたら良いか?
もう一つは、ブラウザごとの仕様によりこの挙動は違うのか?
の二点だ
よろしく頼む
0021デフォルトの名無しさん
垢版 |
2019/02/26(火) 20:23:51.98ID:c2o2e7e/
>>20
自分でファイル名をそういう風にエンコードすれば?
0022デフォルトの名無しさん
垢版 |
2019/02/26(火) 20:30:51.25ID:vB+znWqX
>>21
すまんが読めなくなるから駄目

あと、断定はしてないが、ブラウザやHTTPDのソフトごとに、エンコードやデコードの扱いの違いがある疑いがある
開発環境のwindowsでANHTTPDってやつ使ってるが、こいつはたぶんファイル名をデコードしてないくさい
でも運用環境(有料で借りてる)のApacheさんはパスをURLデコードしてる模様
俺の予想だと、ブラウザも古いのだと絶対自動でUTF-8なんかにはデコードしないと思う。

もしかしたら間違ってるかもしれないけど


困る
統一して欲しい
0024デフォルトの名無しさん
垢版 |
2019/02/26(火) 20:51:34.33ID:vB+znWqX
>>23
ほぼない
けどWeb制作板に行くとエンコードどころか文字コードも理解してなかったから絶対回答こない
0025デフォルトの名無しさん
垢版 |
2019/02/26(火) 21:02:05.63ID:c2o2e7e/
どうしてもすぐになんとかしたいなら全てをUTF8にする。
0026デフォルトの名無しさん
垢版 |
2019/02/26(火) 21:32:12.63ID:tHWhBgwU
ほんとにcp932なのか?
実はUTF-8で出力されてて、ヘッダはただ無視されてたりしないのか?

まず、クライアントでデータを保存して、バイナリエディタで確認してみたら?
0027デフォルトの名無しさん
垢版 |
2019/02/26(火) 22:01:28.20ID:DhIH/rsp
そのような不正な URL がどのように扱われるかを問うのはあまり有意義とは思えない。
適切に扱ってほしいなら適切にエンコードするしかないと思うのだが。
HTML::Element とか URI を使えば簡単だよ。
0028デフォルトの名無しさん
垢版 |
2019/02/27(水) 00:05:17.07ID:7T/MRSXz
>>26
ほんとにcp932
なのにutf8でエンコードされる
>>27
cgiは、どっかにあるHTMLが書いてあるテキストファイルを読み込んで出力してるだけだから、<IMG SRC="あいうえお.jpg">のあいうえおの部分を見つけ出してエンコードするのは無理がある。
さらにエンコード下として、それをデコードしてパスを通すhttpdと通さないhttpdがあるようなので仕様を知りたい
0029デフォルトの名無しさん
垢版 |
2019/02/27(水) 02:26:58.26ID:Hcodp8Vt
ホントにそうなら、やっぱブラウザのせいなんかね。
データをデコードしたテキストをそのままURLにしたら、たしかにそうなりそうな気はする。

どうしてもあちこちいじらずに簡単に対処するなら、サーバーのほうはどう?
プロキシとかRewriteとか使って、とにかくURLを受けてしまってから、受けたURLを動的に解釈したら?
0030デフォルトの名無しさん
垢版 |
2019/02/27(水) 03:01:51.84ID:7T/MRSXz
>>29
もうcp932のファイル名はやめて全部アルファベットにしようと思うのだが、
Rewriteってなんだろう
アニメが出てきたんだが

まあおまえらありがとうな
utf8ならまだしもcp932のファイル名をそのまま使おうとした俺が悪かったんだよきっと
でもwindowsがcp932のファイル名だからしょうがないんだよ
0031デフォルトの名無しさん
垢版 |
2019/02/27(水) 09:17:13.93ID:MitD/HmJ
>>20
ブラウザがUTF-8 と解釈するのは、HTML のheader に、言語の指定をしていないからじゃないの?
ただし、sjis を指定しても、そのPC がsjis に対応していないかも?

>>22
>運用環境(有料で借りてる)のApacheさんはパスを、URLデコードしてる模様
URLデコードするかどうかを、設定ファイルで指定できないの?

>>30
web 系は、すべてのファイルを、BOM 無しUTF-8(UTF-8N)に統一すべき!
他の言語を使うと、PC・スマホがその言語に対応していない場合に、バグる
003331
垢版 |
2019/02/27(水) 12:43:30.58ID:MitD/HmJ
漏れは、web 系の本を、軽く数十冊は読んでるけど、
sjis のファイルを使う本は、見たことがない

それに、パス・ファイル名などのシステムの構成物に、全角を使う本も見たことがない。
パス・ファイル名は、ファイル内容のテキストじゃない。
あくまでもシステムの構成物だから、半角英数字が基本

Linux・Windows 共用のパス・ファイル名には、半角英数字と、_ (アンダーバー)だけを使う。
半角空白もバグるので、すごく嫌われる

さらに、大文字小文字だけが異なる、パス・ファイル名も使ってはいけない。
例えば、Ab, aB がLinuxでは使えるけど、Windowsでは共存できないから

だから、このシステムは、sjis・全角の2つを使う、違反を起こしている!
こういうやり方を書いた本は、絶対に無いはず

sjis を使っているのは、ロートルの5ch ぐらいw
だから少しでも、5chのシステムをいじるとバグるから、システムを修正できない!
0034デフォルトの名無しさん
垢版 |
2019/02/27(水) 13:14:56.19ID:FWLYBGBg
>>30
「RewriteRule」。
# 「httpd」とかいうから、Apacheに詳しいんかと思ってた。

要はとにかく、サーバーがURLを受けてから、それをランタイムで変換して実際のアクセス先を決めることはできるはず、という提案。
0035デフォルトの名無しさん
垢版 |
2019/02/27(水) 13:19:18.71ID:FWLYBGBg
>>31
URLデコードを禁止できるか?
URLの仕様なのに。
それに、もししたとしたら、CGIの引数とかどうなるんだ?
0036デフォルトの名無しさん
垢版 |
2019/02/27(水) 14:29:50.58ID:7T/MRSXz
>言語の指定をしていないからじゃないの?
してる

>$print_code .= q[Content-Type: text/html;charset=Shift_JIS] . qq[\n];
>$print_code .= q[<META http-equiv="content-type" charset="Shift_JIS">];

>URLデコードするかどうかを、設定ファイルで指定できないの?
金払って借りてるマシンなのでたぶん無理なんじゃね?
いやApacheさんの使い方とか仕様とか全然知らないから知らんけど

>UTF-8(UTF-8N)に統一すべき!
cgiが古いんだよ
作り直したいけど簡単そうじゃないので放置してる
気持ち的には全部utf8にしたい

>>34
俺のサーバーじゃないけどそんなこと出来るのか?
003731
垢版 |
2019/02/27(水) 15:05:26.60ID:MitD/HmJ
>>36
>$print_code .= q[Content-Type: text/html;charset=Shift_JIS] . qq[\n];
>$print_code .= q[<META http-equiv="content-type" charset="Shift_JIS">];

「html sjis meta」で検索すると、以下が見つかる。
上とは、ちょっと違う

<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">

他には、PHP で作ったそのファイルが、UTF-8 で保存されているとか?

「html sjis 文字化け」で検索すれば?

文字化けを防ぐ&解消する方法
https://www.be-webdesigner.com/tips/coding/mojibake.htm
0038デフォルトの名無しさん
垢版 |
2019/02/27(水) 20:57:58.02ID:Hcodp8Vt
>>36
レンサバでも、管理者だったらいろいろできる。
しかし、もしそうだったとしても、どうやらたぶんおまえにはムリぽなので、もうあきらめろん。
0039デフォルトの名無しさん
垢版 |
2019/03/02(土) 02:33:03.15ID:LJe83Rmr
>>20-21
ブラウザごとにURLエンコードは統一は取れてなかったと思うよ
まず開発環境としてANHTTPDの使用をやめることをお勧めする
IISかApacheをインストールして使った方がいいと思う
0040デフォルトの名無しさん
垢版 |
2019/03/04(月) 18:44:25.85ID:G/cMwSEz
https://lavender.5ch.net/test/read.cgi/airline/1551189110/

このツールが使えない
誰か使い方を教えてくれ

ソースを拡張子.plにして保存、perl実行環境はインストール
ここまでは出来てる
ソースの改造の仕方が分からない
0041デフォルトの名無しさん
垢版 |
2019/03/04(月) 19:13:42.66ID:Y5viPS4k
連投ツールとか名前が穏やかじゃないから教えない
0042デフォルトの名無しさん
垢版 |
2019/03/04(月) 19:18:59.22ID:TpCWsYE8
今の5chではスクリプトによる連投はできないのでは?
試したことないのでわからんが。

しかしそのツールなんでわざわざforkして子プロセスに同じことさせてんだろ?その辺がワザなのか?よくわからんね。
0043デフォルトの名無しさん
垢版 |
2019/03/04(月) 20:43:15.61ID:q6ai/7VO
Perl は初めてかい? まず、Perl の勉強からだね。
何をするプログラムかは後回しにして、何が書かれているかを理解できるようになろう。
書かれていることを理解できるようになったら、使われているモジュールを理解しよう。
LWP を使ってみよう。勉強しなければならないことがたくさんあると気付くだろう。
最低でも HTTP の仕様書くらいは読まないと話にならない。
ここまでできれば最初のソースコードを理解して改造だってできるかも。
0044デフォルトの名無しさん
垢版 |
2019/03/04(月) 20:47:32.38ID:Y5viPS4k
彼はインストール方法を知りにきただけであってPerlを知りにきたわけではないだろう
0046デフォルトの名無しさん
垢版 |
2019/03/04(月) 21:19:56.49ID:W5B7ie4G
今の2ちゃんは決まったツールでしか投稿できない
0047デフォルトの名無しさん
垢版 |
2019/03/04(月) 23:55:42.18ID:TpCWsYE8
だよなあ。そのせいでお気に入りの専ブラ使えなくなったし。
0048デフォルトの名無しさん
垢版 |
2019/03/05(火) 15:13:16.59ID:opbbmC0J
もうC++/Qtで書く気がしない。
Perl/Qtで事足りる。
Perlの開発者が「PCの速度が上ればCである必要はないだろう」みたいな事言ってたけど、
まさにその通りだな。
0050デフォルトの名無しさん
垢版 |
2019/03/06(水) 21:27:34.75ID:USxtxcs5
なんかのはずみで処理が終わらなかったとき、自殺するようにしたいんだけど、

eval {

alarm 5;
$SIG{ALRM} = sub { exit; };

};

これでいいんだっけ?
0051デフォルトの名無しさん
垢版 |
2019/03/06(水) 21:55:14.52ID:/3I9LNWz
いいんじゃないすか それだけだとevalはいらないと思うけど
あと慣例ならハンドラ設定が先かな exitじゃなくdieとか
0052デフォルトの名無しさん
垢版 |
2019/03/06(水) 22:26:52.53ID:USxtxcs5
ありがとう

>evalはいらないと思うけど
よく覚えてないけど、evalはシグナルに対応してないシステムだとエラーで落ちる気がした
0055デフォルトの名無しさん
垢版 |
2019/04/29(月) 00:48:49.16ID:OgUfT4lW
メアド用にさくらインターネットのライトプラン(sslログインなし)借りてるんだけど
そこにちょっとしたcgi作って置こうとしてて
ものすごい久々にuse CGIとかやってます。

で、corelist CGIってやると
> Data for 2018-01-20
> CGI was first released with perl 5.004, deprecated (will be CPAN-only) in v5.19.7 and removed from v5.21.0
と出るんだけど

CGIが標準モジュールから削除された理由とか、
代替となるモジュールって知ってる人いませんか。

Perlはweb用の言語じゃないから標準モジュールからは消した とか
そんな理由ならいいんだけどさ。。
0056デフォルトの名無しさん
垢版 |
2019/04/29(月) 01:34:45.78ID:EAhXUlQz
「core は出来るだけ小さく」
「CGI はもはや Web の主流ではない」

かな。必要になった者のみが追加でインストールすればよい
標準で代替になるようなものはないと思うが pure perl だろうし最悪 CGI モジュールも一緒にアップロードとかでも動くでしょ

そもそもさくらレンタルサーバーで使える perl って 5.8 〜 5.14 ぽいけど
ttps://help.sakura.ad.jp/hc/ja/articles/206053142#ac05
0057デフォルトの名無しさん
垢版 |
2019/04/29(月) 01:57:14.83ID:OgUfT4lW
>>56
どもども
その理由なら安心ですわ
perlのバージョンは確認したんだけど、消えた理由によっちゃ使うの気持ち悪いなーと思ったので
どもでした。
0059デフォルトの名無しさん
垢版 |
2019/05/21(火) 21:00:16.28ID:BVi2WQ22
ていうかこんなに長くアップデートが続いていることだけでもかなり凄い事だと思う。
0061デフォルトの名無しさん
垢版 |
2019/06/01(土) 02:23:48.95ID:4bbBO9Ct
$str =~ /$pattern/
みたいなことはできるけど、
$str =~ /$pattern/$opt
みたいにして大文字小文字を同一視するかどうかを動的に指定したい
if文で処理行を分けるしか無理?
0062デフォルトの名無しさん
垢版 |
2019/06/01(土) 04:41:47.86ID:uuPo6pHP
>>61
eval 使えばいいのでは?
0063デフォルトの名無しさん
垢版 |
2019/06/01(土) 08:47:17.23ID:GQlgchjf
Ruby では、Regexp オブジェクトで、動的に作れる

str = "aB"
opt = Regexp::IGNORECASE

p re = Regexp.new( str, opt )
#=> /aB/i
0064デフォルトの名無しさん
垢版 |
2019/06/01(土) 10:32:32.69ID:uuPo6pHP
パターンマッチの直前で比較対象の文字列を uc() 使って小文字を全て大文字に変換しておく、または lc() で大文字を全て小文字にしておく事でも実現できるな。
パターンの方にも変換必要になるかも知れないが、それについては予め大文字または小文字でパターン作っておけば回避できる。
0067デフォルトの名無しさん
垢版 |
2019/06/01(土) 11:49:39.64ID:4bbBO9Ct
(?i)と書いておけばいいだけか
じゃあもう実装済みで、使う側でどうにでもできる
0069デフォルトの名無しさん
垢版 |
2019/06/13(木) 09:38:18.19ID:8EHJsjb3
Pythonはほどほどの長さのスクリプト言語としてならアリなんだが
ツールとしては良くも悪くも電卓だなぁ
0070デフォルトの名無しさん
垢版 |
2019/06/14(金) 01:28:05.42ID:TwyiKBjF
バッチは使いやすさでperl、サーバだと今はパフォーマンスで選んでgolangやろうとしてるわ
0073デフォルトの名無しさん
垢版 |
2019/06/16(日) 10:31:31.41ID:Q48cejx2
windowsでreaddirするとcp932で読めてくる

それだと面倒なので、opendirする時か、ハンドラに対して、
decoding(cp932) みたいに指定するにはどうすればいい?
0075perltidy バグってない?
垢版 |
2019/06/28(金) 03:27:32.11ID:yOZUOG90
perltidy -pbp -nola perl_file
この -pbp は perl best practices にする設定になっている
という仕様が書かれているが

sub {
:LABEL
for ....................

のようなラベルが本の通りにならない。たとえば 103ページなど
ラベル調整を諦めて -nola をつけ、手動で正しくすることにした

これバグだよな?
0082デフォルトの名無しさん
垢版 |
2019/06/29(土) 15:18:34.74ID:3U68S2mZ
一旦生で読んでcp932でデコードすればいいのか
LWP:Simpleだとそのへんに手が出せない
0083デフォルトの名無しさん
垢版 |
2019/06/29(土) 17:02:36.85ID:o1VtcfU0
MySQLもそうだけど、sjisは使っちゃイカンやろ。
細かいところで文字の置き換えルールがメチャクチャだったような。

いわゆるシフトJISはとにかくcp932で。
0085デフォルトの名無しさん
垢版 |
2019/07/06(土) 10:10:18.37ID:oMEfEQKE
元がeuc-jpだと、
$str =~ s/\x{301c}/〜/g;
みたいなことを明示的に書かないと、回避できないみたい
同じものやがな
0086デフォルトの名無しさん
垢版 |
2019/07/12(金) 02:22:50.96ID:AjCqo1Mf
下記のコードですがダブルクォートを介さずに$testから'フ'を表示させる方法はありますか?

#!/bin/env perl

use strict;

use warnings;
use utf8;

my $test = '\xE3\x83\x95';
my $test2 = "\xE3\x83\x95";

print "$test\n\n";
print "$test2\n\n";
008986
垢版 |
2019/07/12(金) 07:58:26.24ID:AjCqo1Mf
ありがとうございます!
0090デフォルトの名無しさん
垢版 |
2019/08/11(日) 05:06:35.55ID:GTeyRs5o
こんな書きかたあったか?
DB<27> printf "%s\n", ('Fizz')[$_%3] . ('Buzz')[$_%5] || $_ for (1..15)
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz


()[]が見おぼえがない
0091デフォルトの名無しさん
垢版 |
2019/08/11(日) 05:17:44.88ID:GTeyRs5o
()で配列とみなしたとき
()[0]は定義されていると考えて
()[1]などは未定義で無しというトリックか
0092デフォルトの名無しさん
垢版 |
2019/08/11(日) 05:42:32.38ID:GTeyRs5o
DB<25> print "$_ cup", ("s")[$_ < 2] , " of coffee\n" for (1..3)
1 cup of coffee
2 cups of coffee
3 cups of coffee
0093デフォルトの名無しさん
垢版 |
2019/08/11(日) 10:17:48.54ID:GTeyRs5o
DB<23> printf "%s\n", "$_ cup" . ("s")x!!($_ != 1) . " of coffee" for (0..3)
0 cups of coffee
1 cup of coffee
2 cups of coffee
3 cups of coffee

DB<24> printf "%s\n", "$_ butterfl" . ("y","ies")[($_ != 1)] for (0..3)
0 butterflies
1 butterfly
2 butterflies
3 butterflies
0094デフォルトの名無しさん
垢版 |
2019/08/12(月) 10:00:54.45ID:1t9yEA1l
今はもう (1)[1] が空リストにならないんだな。perl5220delta に書いてあった。
リストコンテキストでの問題を避けるために
[split( /::/ , $class)]->[4]
みたいな書き方をしていたんだが。
いや、これは変えなくていいのか。
0095デフォルトの名無しさん
垢版 |
2019/08/12(月) 10:16:24.43ID:BBJuWfXI
undefは省力とかフェールセーフ的に有効にするんじゃなくて、
厳密に仕様化して積極的に使うべきだよな

初期化されてないものを使うのが気持ち悪いと感じるのは、
auto変数が本当に領域確保するだけだった頃の名残り
0096デフォルトの名無しさん
垢版 |
2019/09/14(土) 11:56:42.38ID:MMNKizJk
簡単なシェルスクリプトしか書けない素人ですがPerlの利点ってどこです?
grep -Pやperl -peで世話にはなっていますが目当てはあくまで正規表現だけですし
比較演算子はbashと逆だし変数は記号で使い分けなきゃならんしなんだこいつってなって
0098デフォルトの名無しさん
垢版 |
2019/09/14(土) 23:46:33.57ID:n7pzU9md
テキスト処理に特化されているところ
そのおかげで "," や " " とかの部分を q(,) q( ) などと書けたり
perl コードが正規表現と一体化していて再帰も扱えたりなど色々あるが
全部特化したことによる利点
0100デフォルトの名無しさん
垢版 |
2019/09/15(日) 00:02:41.49ID:epz106Yo
bashで凝ったことを書くことを考えたら、Perlのほうがはるかに簡単。
bashは所詮シェルなので、クォートとかエスケープとか変数とか関数とか、いちいちワナが多いからな。
0101デフォルトの名無しさん
垢版 |
2019/09/15(日) 17:56:28.72ID:riyG3w3b
Perlの利点?
他の言語と同様になんでもできることかな。モジュール色々使うと作るの楽だしOSの違いもかなり吸収されてWindowsでもLinuxでも何も変更せずに動くプログラムも作れる。

シェルスクリプトも外部コマンド動かせば何でもできるとは言えるが、起動のオーバーヘッドの問題や起動しているコマンドの仕様が変わったときに個別に対応しなければいけないなど面倒な事がある。
0102デフォルトの名無しさん
垢版 |
2019/10/23(水) 15:22:28.55ID:Q75cL8J3
>>101
> OSの違いもかなり吸収されてWindowsでもLinuxでも何も変更せずに動くプログラムも作れる。
これでとんでもない目に遭ったぞ。
perlの\nは、内部的にはLF のみだが、OSがWindowsなら、出力する際に
CR+LF に自動的に変換してくれる。
しかし、出力文字コードがutf16le だと、特殊な宣言文を書かない限り、
LF (0x000a)は 「0x000a000d」ではなく、「0x000a0d」に変換され、
ぐちゃぐちゃに文字化けする。

文字化けの原因を特定し、回避方法を見つけるために、ずいぶん時間を取られた。
0104デフォルトの名無しさん
垢版 |
2019/10/23(水) 17:37:45.28ID:azQS8Nqn
>>102
\n は他の言語でも気を付けた方が良い。
例えC言語だったとしても歴史的な事情でライブラリが勝手に変換するかも知れない。
この頃はそれにまつわるバグは減ってるとは思うけどね。

ま、少なくとも \n を \x0a だと信じ込んで使うのは止めた方がいいだろうな。
\x0a はあくまでも \x0a と書いた方が良い。
Javaとかでは改行は System.out.println() を使って改行させるようにして \n を埋め込んでの改行は極力避けた方が良い。
0105デフォルトの名無しさん
垢版 |
2019/10/24(木) 00:15:31.72ID:dNYiTPCj
>>102
いや、特殊な宣言文ってなんだよ。PerlIO の man 読めよ。
open 関数や binmode 関数の説明にも「PerlIO を読め」って書いてあるよ。
0107デフォルトの名無しさん
垢版 |
2019/10/24(木) 06:24:46.42ID:rCe9ez9s
\nを埋め込んだ箇所が一つでもあったらアウト
みたいな作り方は絶対失敗する
0109デフォルトの名無しさん
垢版 |
2019/10/24(木) 09:04:15.10ID:LjTGtkP8
>>105
> いや、特殊な宣言文ってなんだよ。PerlIO の man 読めよ。

結論としては、下のように書けばいいのだが、これはネットで色々探して
見つけてきたもので、PerlIO の man 読んで自分で見い出すことは、
私にはできなかった。それが出来る人は凄いと思う。

binmode STDOUT => ":raw:encoding(utf16le):crlf";
0111デフォルトの名無しさん
垢版 |
2019/11/06(水) 01:45:01.50ID:yvB3xxPc
消費税計算(10%)しようとしました。税込550円を消費税と本体価格にする。

$a = 550;
$b = 1.1;

$c = $a / $b;
$d = $a - $c;

$e = int($c);
$f = int ($d);

print すると、
$c は 500
$d は 50.000000000001(0の数はだいたい)

$e は 499
$d は 50

とうやら550 / 1.1 が内部的に割り切れていない様子(おそらく実際は内部的に499.99999999999999になってるのでintすると499に)

ロジックの変更で回避したけど、このバグ聞いたことありますか?
0112デフォルトの名無しさん
垢版 |
2019/11/06(水) 02:54:03.98ID:normnvJW
>>111
バグじゃなくて仕様やろ。
Perlの数値型はdoubleなので、1.1が正確に表現できてないんちゃう?
浮動小数点数の誤差についてぐぐれ。
0113デフォルトの名無しさん
垢版 |
2019/11/06(水) 03:29:15.89ID:normnvJW
>>111
おせっかいかもだがもうひとつ。
その手の誤差を回避するのは、ロジックでなんとかできることもあるが、実際にはなかなか難しいはず。
たまたま誤差が見えなくなってるだけの可能性もありそうなので、動作確認は慎重にな。

ちゃんとやるなら、decimal的なモジュールを使ったほうが。
あるかどうかは知らんけど。
0114デフォルトの名無しさん
垢版 |
2019/11/06(水) 03:46:51.16ID:QwLiS9cf
>>111
バクではなく仕様。
ちなみにPython,Tclで確認してみましたが同じ出力結果になりました。

どんな言語でも金額の計算や小数点の桁を調整をする場合、
int(切り捨て)、round(四捨五入)、ceil(切り上げ)などで処理するか、
出力時に、printfやsprintfを使って、"%.0f"などを指定して桁を合わせる
必要があると思います。
0115デフォルトの名無しさん
垢版 |
2019/11/06(水) 03:51:32.22ID:ZoqI13Ph
あるよ
use bigrat;
my %ISO_number = (
100 => 0,
125 => 1/3,
160 => 2/3,
200 => 1,
250 => 4/3,
320 => 5/3,
400 => 2,
500 => 7/3,
640 => 8/3,
800 => 3,
1000 => 10/3,
1250 => 11/3,
1600 => 4,
2000 => 13/3,
2500 => 14/3,
3200 => 5,
4000 => 16/3,
5000 => 17/3,
6400 => 6,
8000 => 19/3,
10000 => 20/3,
12800 => 7,
);

# dirty hack: 0/1 force rational type
# warning: if it locate last, sum goes WRONG!
printf "%s\n", 0/1 + $shutter_speed{$ss} + $F_number{$F} - $ISO_number{$ISO};
0116デフォルトの名無しさん
垢版 |
2019/11/06(水) 09:06:26.53ID:dfSHCt1W
浮動小数点の問題は知っていたが、こうなる事は初めて知った。危ないもんだな。

$c = $a / $b; # $c = 500
$e = int($c); # $e = 499
0117デフォルトの名無しさん
垢版 |
2019/11/06(水) 09:28:51.28ID:i85ttsqs
>>111
それはバグではないし、昔々からある超有名な仕様。知らないのはお前だけ。
0118デフォルトの名無しさん
垢版 |
2019/11/06(水) 10:08:35.95ID:yvB3xxPc
>>112
>>113
>>114
>>117
仕様で他の言語でもあるのですね。Perlで明示的な型指定とかはほぼ考えたことが無かった(1.08の時は意図した結果が得られていた)ので、勉強してみます。
ありがとうございます。
0119デフォルトの名無しさん
垢版 |
2019/11/06(水) 10:29:25.24ID:i85ttsqs
言語というよりはライブラリやCPUの問題だ。
しかしだいたいのメジャーな言語が採用しちゃってるので言語に関係なく出ると思って良い。
0120デフォルトの名無しさん
垢版 |
2019/11/06(水) 17:59:53.94ID:j94j+HrP
言語仕様っていうと違和感あるね
意図してこうしてますって感じで
IEEE 754の仕様といえばそうなのかもしれんがあれは規格であって
仕様とはまたニュアンスが違う なんつーか実数扱うときはそんなもんという感覚
0121デフォルトの名無しさん
垢版 |
2019/11/06(水) 18:58:09.30ID:yvB3xxPc
>>111
一応、取った対応策です(消費税計算なので精度は不要)
除算解は有効桁数以下が切り捨てになり表示などで見える値以下になると想定しました

$a = 550;
$b = 1.1;

$c = ;
$tax= int($a - $a / $b); # $tax = 50
$net = $a - $tax; # $net = 500


端数を残したまま税込から除算解を引いてintして税とし、税込から税を引いて本体としました
とりあえず期待した結果は得られています

ありがとうございました。
0122デフォルトの名無しさん
垢版 |
2019/11/06(水) 18:59:08.05ID:yvB3xxPc
$c = ;

この行余計でした
0124デフォルトの名無しさん
垢版 |
2019/11/06(水) 19:52:26.69ID:mEOqpT9o
>>121
税率によってはきっとアカン場合がありそう。。。
単純な切り捨てはヤバいような。
まあ、そこまでの精度はイランのやろけども。

ちなみに、今回のケースなら、$x/1.1とするのではなく、$x*100/110としたほうが安定しそう?
0125デフォルトの名無しさん
垢版 |
2019/11/06(水) 20:39:05.70ID:yvB3xxPc
>>124
うちは税込ものを分離する時は消費税側で小数点以下切り捨てなのでOKなのです
四捨五入とか会計方針によっては稀に問題が出るかもしれませんね
0126デフォルトの名無しさん
垢版 |
2019/11/06(水) 21:15:49.18ID:i85ttsqs
1.1を掛けるなら11を掛けてから10で割った方が良いかもな。そうすると正数計算でやれる。
切り上げや四捨五入をしたい場合は10で割る前に一桁目を見て10を足したり足さなかったりすれば良い。
0127デフォルトの名無しさん
垢版 |
2019/11/06(水) 21:18:49.26ID:i85ttsqs
ああ。逆か。税込みから本体と税を求めるのか。でも考え方は同じだな。
0128デフォルトの名無しさん
垢版 |
2019/11/07(木) 00:06:59.16ID:gr4VkOsJ
>>125
違うぞ。今回の問題点をちゃんとわかってるか?
1.1と書いたリテラルが、実際の値は1.10...となっていて、1.1よりも大きかったことだぞ。

誤差の具合によっては、正確には切り捨てが不要な値でも、除数が大きいせいで計算結果が実際よりも小さい値になってしまって、してはいけない切り捨てが発生してしまう可能性はないんかね。
0130デフォルトの名無しさん
垢版 |
2019/11/07(木) 01:08:34.48ID:q6f07NqD
>>128
消費税は小数点を使わず整数計算で
10 /110
8 / 108
で計算するようにします

アドバイスありがとうございます
0131デフォルトの名無しさん
垢版 |
2019/11/07(木) 01:12:13.17ID:q6f07NqD
>>128
うちの会社ではあんなに国家予算並みにたくさん「0」が出てくる消費税計算は無いのでとりあえずの回避でも大丈夫です
とはいえ先ほどのように整数計算に修正しようと思います
0133デフォルトの名無しさん
垢版 |
2019/11/14(木) 22:54:58.33ID:cMIrVE8k
ファイルハンドル($fh)からファイル名を取得する方法ってありますか?
・stat $fhでinode取得してシェルのfindで見つけるってのはコストかかるのでやりたくない。
*{$fh}{IO}辿ってIO::Fileから得られないかなって調べたんですけど分かりませんでした。
基本的にそういう思想がないってことかも知れません。
0135デフォルトの名無しさん
垢版 |
2019/11/15(金) 12:49:10.35ID:qkK0C17l
ファイルハンドルからファイル名を求めるシステムコールとかもないしな。
ハードリンクされてて1つのi-nodeで複数のファイル名を持ってたらどうすんのっていう問題もある。

自分の作ったプログラムの中だけでいいならそのプログラム内だけの独自のopen,close作ってそこでファイル名を保持しとけば良いんじゃないかな。
0136デフォルトの名無しさん
垢版 |
2019/11/15(金) 22:37:17.80ID:9LSwivmi
お二方ありがとう
そもそもそういう使い方をするものではないって理解しました
0137デフォルトの名無しさん
垢版 |
2019/11/17(日) 00:22:07.56ID:+/PgA3gU
そもそもファイルをopenした時点で、ファイル名は自明だろ、、、
<>の場合は、今開いているファイル名は、$ARGVでアクセス出来るし、、、
while(<>){ print $ARGV if $. == 1 ; $. = 0 if eof }

他は、自分でコード書くんだからファイルリストの管理すりゃいいだけの
話だし。
0138デフォルトの名無しさん
垢版 |
2019/11/17(日) 00:47:01.26ID:7P3Fm4Oa
>>137
ファイルハンドルだけもらうクラスかもよ
0139デフォルトの名無しさん
垢版 |
2019/11/17(日) 01:44:18.01ID:cO7DNsZu
いや、気持ちはわかるやろ。
ファイルハンドルは、しょせんハンドルでしかないと納得するのは、事情がある程度わかってからなんだから。
0140デフォルトの名無しさん
垢版 |
2019/11/17(日) 07:47:40.51ID:bNRHw2eJ
ファイルハンドルをインクリメントすると次のファイルを指すハンドルになることはあまり知られていない。
0142デフォルトの名無しさん
垢版 |
2019/11/18(月) 08:50:22.41ID:4tmHvePg
ActivePerl 5.22 から 5.28 にアップデートしたのだが、
次のものがなくなってしまって、とても不便になった気がする。
・PerlEz.dll
・ppm(perlパッケージマネージャー)
・htmlドキュメント

他の2点はいいとしても、PerlEz.dllが無いと生きていけないので、
5.22 に戻した。もう一生5.22 を使い続けることになるのかな。
なぜ、こんな事をするのだろうか?
0144デフォルトの名無しさん
垢版 |
2019/11/22(金) 22:32:44.69ID:G0qxcoi/
そういやみんな最新の安定版使ってんの?
うちは5.20で止めてる。特に意味はないんだけどこれが安定してるってどこかで見たから。
0146デフォルトの名無しさん
垢版 |
2019/11/23(土) 00:04:49.15ID:pA1s2lMR
俺もCentOSのデフォルトだわ
5.16.x
もう枯れてるしね
0148デフォルトの名無しさん
垢版 |
2019/11/23(土) 01:08:20.02ID:uP8OeUg3
perlのワンライナーについて質問です。

cat /home/xxx/aaa.txt | perl -spe 's/AA/$var/; END{print "complated.\n"}' -- -var="BB" > bbb.txt

上記のようにすると、END部分の終了メッセージもbbb.txtに保存されてしまいます。
そこで下記のようにしてみたのですが、入力ファイルの指定と"--"以降の引数がうまく与えられずエラーになります。

perl -i -spe 's/AA/$var/; END{print "complated.\n"}' /home/xxx/aaa.txt -- -var="BB"

どのようにすれば入力ファイルの指定と変数渡しを一緒にできますか?
0152デフォルトの名無しさん
垢版 |
2019/11/24(日) 00:31:51.83ID:jceUCsgs
>>150

ご意見有難うございます。
ファイルを一番最後に入れるとできるということがわかりました。

perl -i -spe 's/AA/$var/; END{print "complated.\n"}' -- -var="BB" /home/xxx/aaa.txt
0153デフォルトの名無しさん
垢版 |
2019/11/25(月) 10:33:31.52ID:veETdbiQ
>>152
-i があるからでは?

-i.bak とかやっとくと .bak をファイル名に付加したバックアップ作れるよ。
多分新規ファイル開いてそちらに出力して後でリネームして元ファイルのバックアップを取ろうとしてるんだろうと思う。
-i の直後に何もない場合はバックアップ取らずに元ファイルにリネームだけやってるんだと思う。
0154デフォルトの名無しさん
垢版 |
2019/11/26(火) 23:14:08.94ID:EA1DZQ5h
>>153

コメントありがとうございます。
今回やることはファイルに上書きしたくバックアップもいらなかったので -i で良いかなと思っていました。
ワンライナーはよくお世話になってるのですが、今回-sでperl内に変数として渡せることがわかり、ますます重宝しそうです。
0155デフォルトの名無しさん
垢版 |
2019/11/30(土) 17:02:59.68ID:hCKH6fU7
今日、学んだこと。

/^([a-c]){2}\1/
は 'abb' にはマッチできるが 'aba' にはマッチできない。
もちろん 'aaa' にはマッチできるが…要するに
/^([a-c]){2}\1/

/^([a-c])\1\1/
と同じではなかった。
0156デフォルトの名無しさん
垢版 |
2020/02/01(土) 09:03:36.56ID:qxbFBKGD
パターンの中で\1って使えるんや…
正規表現って普通「事前に」FSMにコンパイルされてからマッチングに使うるんじゃないの…?
バックトラックとかする高度な実装のやつはまた違うんかね
0157デフォルトの名無しさん
垢版 |
2020/02/01(土) 13:27:18.26ID:wtOh7v6m
>>156
¥1は、むしろパターンの中でしか使わない。外で使うときは$1のほう。
正規表現は、バックトラックがあたりまえ。しない実装なんかあるか?

いろいろ勘違いしてるぞ。
0159デフォルトの名無しさん
垢版 |
2020/02/02(日) 13:46:05.69ID:9cWLJdKQ
s/(pattern)/\1/
という使い方をするもんだと思いこんでいて、謎のバグに悩んだ
0163デフォルトの名無しさん
垢版 |
2020/02/05(水) 04:02:23.57ID:rxl56Lqp
モダンとか死語だもんな
そういうワード使うしかなかった当時の状況もあるけど
0164デフォルトの名無しさん
垢版 |
2020/02/05(水) 17:51:27.40ID:9nK7Yle0
死語かなあ?
0165デフォルトの名無しさん
垢版 |
2020/02/05(水) 21:33:12.52ID:SZWAnwkp
>>156
決定性有限オートマトンと非決定性有限オートマトンについて調べるといいぞ。
lex は前者で Perl は後者だ。
0168デフォルトの名無しさん
垢版 |
2020/02/06(木) 00:10:26.01ID:UIZEnib+
perlの最新本って、これくらいだろ
初めてのPerl 第7版 2018/01/20
Effective Perl 第2版 2015/02/17
0173デフォルトの名無しさん
垢版 |
2020/02/10(月) 22:55:04.23ID:hYCIpnsp
非決定性有限オートマトンは決定性有限オートマトンに変換できる
ていうか両者の能力は同じ(正規言語止まり
0175デフォルトの名無しさん
垢版 |
2020/02/11(火) 08:07:12.06ID:RnNFx+rl
んまーできると言っても状態数の爆発を伴うこともあるので
非決定性有限オートマトンのままにしといて入力が来たときに探索(バックトラック)で解決、
というのもアリっていやーアリ
0176デフォルトの名無しさん
垢版 |
2020/02/11(火) 17:49:46.25ID:ix+UlUL8
名前変えたんだよね?やっぱ違いがありすぎて紛らわしいから変えたのか?
0177デフォルトの名無しさん
垢版 |
2020/02/11(火) 17:50:45.15ID:ix+UlUL8
すまん。リロード忘れて間に他の書き込みが挟まった。Perl6の話ね。
0180デフォルトの名無しさん
垢版 |
2020/02/12(水) 01:53:33.21ID:CB9IiDBv
YouTuberは「最強の職業」である理由。
https://www.youtube.com/watch?v=XjV3Nb0-hgA
【事例付き】YouTuberは最強の副業である件について。
https://www.youtube.com/watch?v=wB8hNuNVoIw&;t=267s
【初心者向け】YouTubeの始め方・稼ぎ方を徹底解説!
https://www.youtube.com/watch?v=YEw-a8qlADM
「YouTubeなんていつか稼げなくなる」という主張を論破する。
https://www.youtube.com/watch?v=VatNILApW4U
収益化から丸1年!YouTubeでいくら稼いだか公開。
https://www.youtube.com/watch?v=-zQxuQqZ5eA&;t=103s
その動画で月商○○万!? YouTubeで稼ぐ裏技的アプローチ。
https://www.youtube.com/watch?v=7I4APU_6i9o&;t=433s
【貧者の工夫で戦え】ガラケーだっていい。YouTube始めるのにパソコンはいらない!
https://www.youtube.com/watch?v=jYdWfjjzD7Y
【第一回】SNS、YouTube、ブログで稼ぐ方法を、丁寧に解説します!
https://www.youtube.com/watch?v=erNiLOncDnY
0183デフォルトの名無しさん
垢版 |
2020/02/12(水) 16:01:22.42ID:SF/q3PcI
Rakuは設計当初からオプショナルな型システムあるし
numpyっぽい操作が言語組み込みだったり
いろいろ早すぎた
0185デフォルトの名無しさん
垢版 |
2020/02/15(土) 12:59:07.78ID:8m1Cr/X/
ハッシュの配列とかも簡単にできるもんね。
perlで作ったプログラムをC++で作り直すと思うとゾッとするw
0186デフォルトの名無しさん
垢版 |
2020/02/15(土) 14:49:16.24ID:av6eWd5V
ハッシュの配列とかスクリプト言語の類ならどれも同じようにできる。
Perlがだめなのは、スカラとリストの二つが存在することだな
同じ書き方をしても、使い方で意味が変わってしまう。
変わるだけならともかく違う解釈で動いてしまうからバグのもとに鳴る。
0189デフォルトの名無しさん
垢版 |
2020/02/15(土) 18:59:30.30ID:jU+J++ht
$aと@aが区別されるので調子に乗って、
$a->[0][0][0] と一緒に $a も使ってバグる
0190デフォルトの名無しさん
垢版 |
2020/02/16(日) 20:31:14.76ID:7RTwZ9VV
まあ、自分で作るには兆便利だけど人のプログラムの修正やメンテはやりたくないなw
やっぱ、C言語ぐらい厳しくないとプロ用は無理だよね。
0192デフォルトの名無しさん
垢版 |
2020/02/17(月) 09:02:59.28ID:3xf/X3D3
他人が書いたものばかりでなく、1年前ぐらいに自分が書いたものを
修正しようとして、「なにやってんの?これ」と思う。
自分自身のために、「しつこいぐらいにコメントを入れる」を心がけてるよ。
0194デフォルトの名無しさん
垢版 |
2020/02/17(月) 13:13:07.93ID:ZZZ2hHJ7
マクロなコードは読んで意味がわかるものにするのは当然として
コメントはビジネスロジックと言うか、フローの説明じゃね
0195デフォルトの名無しさん
垢版 |
2020/02/17(月) 13:17:02.86ID:5usMQUGr
書いてあることを説明する必要はない。
コメントで書くのは、なぜこんなフローにしたかだ
0197デフォルトの名無しさん
垢版 |
2020/02/17(月) 15:20:38.00ID:wTmXuXv8
一見すると何やってんだか分からなくてもよく辿るとスゲエなこれ天才じゃねって思うことある
自分が書いたんだけどね
0198デフォルトの名無しさん
垢版 |
2020/02/17(月) 20:40:48.55ID:Y4S6wB9m
書くのも読むのも全然困らないようなコードしか書かないのが理想

難解な処理は、きっともっとシンプルに解決できる
0200デフォルトの名無しさん
垢版 |
2020/02/18(火) 20:13:13.66ID:55IHv/fO
my @result = grep !$temp{$_}++, @list;

凄げーよね、@listをuniqにソートするコードだって。
パールならではだよね。
普通なにしてるかわからんよw
0206デフォルトの名無しさん
垢版 |
2020/02/18(火) 21:34:51.09ID:55IHv/fO
>>203
>>204
ゴメンソートは関係無かった。

uniqしたくて、検索したらこれが出てきたんだけど、自分で作るなら
for文で回してif文でチェックしてpushで配列に入れる。まあ、どんな言語でも動くやつね。

パッとこのコードが書けるんならいいけど、ここで時間を掛けたくないよね。
0208デフォルトの名無しさん
垢版 |
2020/02/18(火) 21:53:35.14ID:2VKhUmei
機能がはっきりしてるから、sub uniqか何かを作って言語仕様かのように書く
きっと既にあるから、コピペで済む
0211デフォルトの名無しさん
垢版 |
2020/02/18(火) 22:20:53.62ID:KQgsUf00
ハッシュを使ってカウントするなんてperlの定石なんだが
入門書のハッシュ解説で必ず載ってるぞ
0213デフォルトの名無しさん
垢版 |
2020/02/19(水) 00:10:20.47ID:XDqysw2e
>>200
Rubyだとuniqが使えるが配列の集合演算でもできる。
result = list | []
0214デフォルトの名無しさん
垢版 |
2020/02/19(水) 00:43:04.19ID:6o0SSmsW
実装は面白くても実際の所普段の仕事では
わかりやすいインターフェースの関数にするから
そういう点で差はでないというね。
0215デフォルトの名無しさん
垢版 |
2020/02/19(水) 01:02:36.28ID:mEonuRdN
>>214
PerlやRubyなら、わざわざ関数にはしないかな。
その場でハッシュにつめてキーだけ使うとかかなりふつうだから。
0218デフォルトの名無しさん
垢版 |
2020/02/19(水) 04:28:09.35ID:UqnCT+lt
>>200
いや。わかる。
君もそのうちわかるようになるよ。
0221デフォルトの名無しさん
垢版 |
2020/02/19(水) 09:31:49.80ID:oZi5GQ/y
ほら、こんなコードで実現できるんやで、
なにやってるか一見わからんやろ
説明しよか?

みたいに言いたくなったら、それは可読性が悪い証拠
0222デフォルトの名無しさん
垢版 |
2020/02/19(水) 12:23:16.28ID:CZsThdPw
Perl慣れしていない人の事を考える必要があるなら
標準モジュールの List::Util で uniq を使えばいいし、
https://perldoc.perl.org/List/Util.html#uniq

何らかの理由で標準モジュールや XS が使えないなら
Pure-perl 実装を CPAN から拾ってくればいいし、
https://metacpan.org/search?q=List%3A%3AUtil

実際 List::Util::PP::uniq() の中身はその手法だぞ。
https://metacpan.org/release/List-Util-MaybeXS/source/lib/List/Util/PP.pm

sub uniq (@) {
  my %seen;
  my $undef;
  my @uniq = grep defined($_) ? !$seen{$_}++ : !$undef++, @_;
  @uniq;
}
0227デフォルトの名無しさん
垢版 |
2020/02/19(水) 20:07:27.51ID:zh3CM0eN
if (defined $table{$var}) {
 $var = $table{$var};
}

みたいな処理
「何か」に対して判定した結果に従ってその「何か」を採用する

何かを2回書くのが嫌な時の逃げ方は何だろう
0228デフォルトの名無しさん
垢版 |
2020/02/19(水) 20:12:42.87ID:1DPeZovD
リストの要素数を得るために空リストに代入するのも慣用句と読んでいいかな?
$n = (() = <*>);
みたいの。
0229デフォルトの名無しさん
垢版 |
2020/02/19(水) 21:01:35.09ID:zh3CM0eN
要素数なんてどうせループにしか使わないので、
そんなのを取得しない解決がきっとエレガント
pythonの何でもイテレータ思想はきっと正しい
0230デフォルトの名無しさん
垢版 |
2020/02/19(水) 21:35:36.75ID:bGX6osz8
>>227
これはあるね しばし考えるんだけど結局一時変数を使う
構造によっては$_が使える時もあるんだけどまれだなあ
0231デフォルトの名無しさん
垢版 |
2020/02/19(水) 21:45:00.08ID:mEonuRdN
>>226
じゃあRubyやらC#やらも滅びるんやな。w

ハッシュのある言語ではあたりまえのイディオムやろが。
0232デフォルトの名無しさん
垢版 |
2020/02/20(木) 00:34:37.37ID:bivTkZxZ
まあ最近の言語は便利な標準メソッド呼べば終わりって感じだからね
Perlは標準モジュールの範囲だけでやろうとすると結構面倒
0234デフォルトの名無しさん
垢版 |
2020/02/20(木) 01:29:24.69ID:bivTkZxZ
最近はPerlのことを喋ると謎の軍団が叩きに来るからな
ネット上で喋れる場所がなくなった
迫害されてる気分
0235デフォルトの名無しさん
垢版 |
2020/02/20(木) 13:15:43.08ID:fXEOX4Gg
Perl/Tk は使い物にならん。プログラムが大きくなると動かないでやんのw
Perl/Qt を推進していくべき。

ここの人はPerlでGUIを使ったりしてる?
0236デフォルトの名無しさん
垢版 |
2020/02/20(木) 15:23:29.96ID:Gm5IubjH
Windows限定だが、Win32-GUIを使ってるよ。
インストールして、次のバッチファイルを走らせると、
細かい具体例のデモが見れる。
C:\Perl\site\bin\win32-gui-demos.bat
0237デフォルトの名無しさん
垢版 |
2020/02/20(木) 17:36:38.86ID:Nllb9nDe
>>231
そうではなくて独自の記号にコンテキスト毎に意味を詰め込む様な言語思想のこと言ってるんだがね。
0238デフォルトの名無しさん
垢版 |
2020/02/20(木) 18:47:26.22ID:CqCGFBWH
入力も出力もテキストで完結してるのがいい

と思ってたけど、最近excelデータを入出力に使い出した
0240デフォルトの名無しさん
垢版 |
2020/02/20(木) 20:44:08.31ID:CqCGFBWH
>>227の例だと
$var = $table{$var} or $var
で概ね動くけど、空文字列なんかが入ってた時に誤動作する

判別はdefinedしか無いとして、それでも書ける短絡評価とは
0245デフォルトの名無しさん
垢版 |
2020/02/21(金) 01:54:46.68ID:dQ0Yz//t
//流行ってる気がしない。
新しい機能を積極的に使う人はそもそもperlを使わないのではないか。
断固外氏のブログのネタにしかなってなさそう。
0248デフォルトの名無しさん
垢版 |
2020/02/21(金) 03:54:06.99ID:6/adwu75
>>227と等価なのは>>241
この例はdefinedだったから適用できるのね
判定が任意だとするとやはり2度書くしかないかね 例えば
if ($table{$var} % 3) {
 $var = $table{$var};
}
perlは同一値への参照と解釈して2回読みにはいかないという気の利いたことはしないだろうね
エクセプション入ったら変わる可能性あるしね
0249デフォルトの名無しさん
垢版 |
2020/02/21(金) 03:58:30.72ID:6/adwu75
//=の逆バージョンあったらいいなとはたまに思うね
そこまで必要性ないという判断でないのだろうけども
0250デフォルトの名無しさん
垢版 |
2020/02/21(金) 07:05:24.88ID:TnPEnehp
$table{$var} が $_ に入るような無害な処理をしておいて、
$var = $_ % 3 ? $_ : $var
と等価なシンタックスシュガーで処理する
みたいなことができれば
0251デフォルトの名無しさん
垢版 |
2020/02/21(金) 09:05:21.00ID:KvZFDIbR
2回読みたくないというのがどういうレベルでの事か分からんが
ソースコードの見た目だけならサブルーチンに押し込めばどうとでも

#!/usr/bin/perl -w
use strict;
use Scalar::Util qw(looks_like_number);

sub dp {
  defined $_[0] ? "d[$_[0]]" : 'u[]';
}

sub if_true(&$$) {
  local $_ = pop;
  $_[1] = $_ if &{$_[0]};
}

my %table = ('' => 1, 0 => 2, a => 3, b => 4, c => 0, d => '', e => undef);
for my $var (sort keys %table) {
  print dp($var), dp($table{$var});
  if_true { looks_like_number($_) && $_ % 3 } $var => $table{$var};
  print " => var[$var]\n";
}
0252デフォルトの名無しさん
垢版 |
2020/02/21(金) 09:57:55.58ID:PzVMR7sv
サブルーチンとか甘え。謎の記号を使って魔法のようなコードを書くのがPerlの醍醐味。可読性は悪
0253デフォルトの名無しさん
垢版 |
2020/02/21(金) 12:24:11.67ID:TKnLlA6x
>>235
昔々 Perl/Tk 使おうと思ったが日本語対応が出来てなくて止めたことがある。
それ以来 Perl で GUI はやってない。
0255デフォルトの名無しさん
垢版 |
2020/02/21(金) 15:45:08.67ID:ooEapY6E
>>253
それ、5.6以前の話?記憶が曖昧だけど、utf8に対応した5.6あたりから、Tkで日本語使えたような気がするけど。
0256デフォルトの名無しさん
垢版 |
2020/02/21(金) 18:15:13.09ID:TKnLlA6x
>>255
忘れた。20年ぐらい前だったかな?
0257デフォルトの名無しさん
垢版 |
2020/02/22(土) 22:24:09.42ID:pvGxmVZm
裏でずっと何かしてるスクリプトを走らせておきたい
ActivePerlのウィンドウが出るのが嫌なので、wperlを起動してウィンドウを出さない
でも、wperlを起動する為のbatファイルのウィンドウがずっと出てる
batファイル以外のいい起動方法はないだろうか
0260デフォルトの名無しさん
垢版 |
2020/02/22(土) 23:01:19.35ID:pvGxmVZm
wperl以降を""で括ると動かないけど、無くせば動いた
これでサーバ監視ができる
0261デフォルトの名無しさん
垢版 |
2020/02/23(日) 06:57:52.64ID:6djC7Yo0
Linuxなら何も考えずにできるが・・・
0263デフォルトの名無しさん
垢版 |
2020/02/23(日) 12:43:19.44ID:1MmoNroU
>>261
シェルからふつうに起動したら、親プロセスとの関連でトラブルが発生するところはどちらも同じ。
というか、むしろLinuxのほうがわかりにくくてひどい。
disownとかnohupとか知ってるか?
0264デフォルトの名無しさん
垢版 |
2020/02/24(月) 04:42:11.62ID:jrwZftYn
知ってるよ。
0265デフォルトの名無しさん
垢版 |
2020/02/25(火) 12:21:34.80ID:Z4NIrtJK
>>260
何か使い方間違ってない?
次のようなコマンドで、普通に通るぞ。
wperl.exe "C:\utp\foobar.PL" "C:\foo\bar.txt"
0267デフォルトの名無しさん
垢版 |
2020/03/05(木) 09:29:31.48ID:hJr+GlCd
ブラウザでは普通に見られる楽天市場の商品ページ
(item.rakuten.co.jp/shop_mei/a012345/)を get 出来なくなった。
ユーザーエージェントやらリファラはイジってみたけど
0268デフォルトの名無しさん
垢版 |
2020/03/05(木) 12:43:29.56ID:eb4C0HQQ
active perl の ppm がなくなっていろんなモジュールが動かないのだが、困ってるの俺だけ?
ググっても誰も文句言ってないな
0270デフォルトの名無しさん
垢版 |
2020/03/05(木) 14:56:24.55ID:NI6SkVuR
新しめのバージョン追ってる人はもう大半がactive perl捨ててstrawberry perlに移住したんじゃね
0272デフォルトの名無しさん
垢版 |
2020/03/06(金) 00:11:57.41ID:Wxp9Lzi1
strawberry perl なら cpan インストーラ、もう少しまともに動くのか。
明日、試してみる。
0274デフォルトの名無しさん
垢版 |
2020/03/06(金) 09:25:47.73ID:7w4EZP5c
>>268
WSLでLinuxそっくり環境の中で普通のPerl使うかOS丸ごとLinuxにしてしまえば悩むことはなくなる。
0276デフォルトの名無しさん
垢版 |
2020/03/06(金) 13:53:08.52ID:YSIXaKl0
visual studioインストールして普通にビルドすれば?
Makefileちょっと変更してnmake叩くだけだよ
0279デフォルトの名無しさん
垢版 |
2020/03/06(金) 23:38:47.92ID:nrb1VEEF
strawberry perl をインストールしたけど、いろんなモジュールをまたゼロから入れなきゃいけないと思ったらヤル気なくなってとりあえず active perl に戻した。
次は active perl のディレクトリを調べて同じモジュールを strawberry perl にインストールするバッチファイル作んないと。
0280デフォルトの名無しさん
垢版 |
2020/03/07(土) 06:00:24.07ID:Q6Yn3ttH
>>279
そんな時代はもう終わってるぞ。

Windows版のPerlは使わない。WSLを使ってLinux版を使う
Perlのバージョンはplenvで管理し、いろんなモジュールは(俺が知っているときと変わってないなら)
cpanやcpanmあたりでプロジェクトごとに簡単にインストールする。

ソースコードをgitで管理してるとして、新しくプロジェクトに参加するなら、
plenvでperl入れて、git cloneしてモジュール入れるコマンド(cpanm?忘れたw)を叩くだけだ。
0282デフォルトの名無しさん
垢版 |
2020/03/07(土) 13:07:09.85ID:nxiojuUK
>>280
クリップボード使えない
アイコンダブルクリックで実行できない
オタクは自分の世界に閉じこもってシコシコやってろよバカ
0283デフォルトの名無しさん
垢版 |
2020/03/07(土) 18:28:23.07ID:jD3HBeI4
> クリップボード使えない
使える

> アイコンダブルクリックで実行できない
CLIでアイコンって何言ってるの?
0284デフォルトの名無しさん
垢版 |
2020/03/08(日) 01:15:11.77ID:DyTj6VlC
perlのスクリプトファイルが関連付けされてたらアイコンダブルクリックで実行できるんだけどね
0286デフォルトの名無しさん
垢版 |
2020/03/08(日) 01:44:53.18ID:DyTj6VlC
>>285
勝手に流れ変えるなよw
>>280がwslって言いだしてwslじゃ不便もあるって話だろ?
0287デフォルトの名無しさん
垢版 |
2020/03/08(日) 05:59:45.97ID:P20sq25k
>>284
何が不便なのかわからない。

関連付けの設定をするのが面倒な ”だけ” か?
ならやっぱりWSLでいいだろ。

関連付けの設定方法がわからないんですは
プログラマやめれのレベルだからな
0288デフォルトの名無しさん
垢版 |
2020/03/08(日) 06:00:52.67ID:P20sq25k
>>286
だからWSLでクリップボード使えるし、
関連付け設定を自分でやればWSL上のスクリプトを動かせる
0289デフォルトの名無しさん
垢版 |
2020/03/08(日) 07:36:51.62ID:nyv63FmX
explorerから.plファイルを起動すると、カレントディレクトリのファイルに対して処理、
みたいなこともできる?
0290デフォルトの名無しさん
垢版 |
2020/03/08(日) 08:33:18.06ID:P20sq25k
できるだろうな。plファイルだけでできるかもしれんし、
簡単なラッパースクリプトが必要になるかもしれんが大した問題じゃない。
Windows特有の問題にぶち当たることのほうが大変だから
0292デフォルトの名無しさん
垢版 |
2020/03/08(日) 09:09:34.43ID:P20sq25k
OSは文字コード変換なんてことは行わない。
そんなものが行われるとしたら、それはお前が
使ってる言語とライブラリがやってる。
ようはお前はPerlを知らんのだ
0293デフォルトの名無しさん
垢版 |
2020/03/08(日) 09:19:17.63ID:nyv63FmX
答えられなくなるとキレるっていうw

cygwinとの互換性で困った問題いろいろは起きそうな感じだな
win8.1のサポートが終わった頃に思い出したら使ってみよう
0295デフォルトの名無しさん
垢版 |
2020/03/08(日) 11:23:41.93ID:2fZbJlty
全部 emacs の中でやれば実質的にクリップボードは使えるし
実行も emacs の中でできる。マウスを使わずにキーボードだけで
すべて完結するが
0297デフォルトの名無しさん
垢版 |
2020/03/08(日) 22:39:04.77ID:gXtOMf8r
WSLってクリップボード使えるの?
use Clipboardでいける?
今はどうなってるか知らんが知らんがcygwinは無理だったんで/dev/clipboard読み書きするラッパー書いてたな
0298デフォルトの名無しさん
垢版 |
2020/03/09(月) 14:08:24.97ID:OgnIoX0o
>>296
マウスを使うのは権利であって義務ではないからなあ
ゆっくりとプログラミングをしたいのてあればどうぞご自由に
0300デフォルトの名無しさん
垢版 |
2020/03/09(月) 19:42:54.58ID:aF4+X/eL
>>288
これマジ?
エクスプローラからWSL上のperlファイルが見えてダブルクリックでWSLのperlで実行できんの?
0301デフォルトの名無しさん
垢版 |
2020/03/09(月) 21:51:11.95ID:1P2a1qpP
無理でしょ
それぞれに違うファイルシステムになってる
参照はできるようになってるというだけ
windows上の/usr/binって何だよ
0302デフォルトの名無しさん
垢版 |
2020/03/09(月) 22:34:27.73ID:aF4+X/eL
だよね
ちょっと信じて損した
0304デフォルトの名無しさん
垢版 |
2020/03/10(火) 01:54:02.54ID:Lezaa9m7
>>300
> エクスプローラからWSL上のperlファイルが見えて
普通ほぼすべてのファイルが見える
見えないのは/procとか/sysとか特殊なものだけ

> ダブルクリックでWSLのperlで実行できんの?
ファイルが見えてるんだから当然ダブルクリックできる。
もちろん関連付けは必要だがな。
それをWSL内で実行するのもWSLを使わずに実行するのも
関連付けの設定次第
0306デフォルトの名無しさん
垢版 |
2020/03/10(火) 02:35:30.61ID:iN6KW/Ct
WSL2は、Windows側のファイル属性とかちゃんとふつうにあつかえるようになったんか?
WSL1のときは完全別物で、全然ダメやったが。
0307デフォルトの名無しさん
垢版 |
2020/03/10(火) 03:13:18.94ID:8QcyJ6p0
WSL1もWSL2も同じ。Linuxのファイル属性として正しく扱えるようになった。
Windowsのファイル属性をLinuxアプリが正しく扱えることはありえないから
逆の発想でLinuxとして正しく扱える方向に舵をとった。
Linuxアプリから正しく扱えないなら意味ないでしょ?
0308デフォルトの名無しさん
垢版 |
2020/03/10(火) 03:17:19.61ID:8QcyJ6p0
そもそもファイル属性はWindowsの方が高機能で
Linuxは、いろいろ拡張入れたら別だが
基本のファイル属性はUNIX初期の頃から変わって無くてかなり貧弱。
Windowsの高機能なファイル属性をそのLinuxにマッピングすることは出来ない。
逆にLinuxのファイル属性を全てWindows側に持たせることは可能
こうすることで全てのWindowsのファイルをLinuxで正しく扱えるようになった。
0309デフォルトの名無しさん
垢版 |
2020/03/10(火) 04:18:19.87ID:/bE8vLVb
漏れは、Ruby のバージョンマネージャー、rbenv をWSL, Ubuntu 18.04 に入れた。
これで、Linux 側に、好きなバージョンのRubyを入れられる

Windows 10 側には、VSCode を入れて、拡張機能のRemote WSL を入れる

これが基本!
0311デフォルトの名無しさん
垢版 |
2020/03/10(火) 12:00:40.16ID:tTiB+rjP
DBIの動作についてお聞きしたいことがあります。

my $dbh = DBI->connect(接続情報);
my $sql = 'パラメータ付きクエリ';

my $ret1 = $dbh->selectrow_arrayref($sql, undef, 'A');
my $ret2 = $dbh->selectrow_arrayref($sql, undef, 'B');

my $sth = $dbh->prepare($sql);

my $ret3 = $dbh->selectrow_arrayref($sth, undef, 'A');
my $ret4 = $dbh->selectrow_arrayref($sth, undef, 'B');

このようなコードで$ret1と$ret2には'A', 'B'それぞれのパラメータを使用した結果が入るのですが、$ret3は$ret4と同じ'B'を使用した結果になってしまいます。
selectrow_arrayrefに同じステートメントハンドラを渡して複数回実行すると、リファレンス実体が最後に実行した結果で上書きされてしまうような雰囲気でした。

Perl 5.10.1 & DBI 1.609の環境と、Perl 5.16.3 & DBI 1.642の環境で試してどちらも同じ結果になったのですが、こういうものなのでしょうか…。
0312デフォルトの名無しさん
垢版 |
2020/03/10(火) 13:47:10.63ID:nryxofxk
>>305
アホか?
バッチファイルでwsl起動してその中で実行してるだけじゃん
レジストリ編集の方もパワーシェルに引数渡してwsl起動してるだけだ
これじゃあcygwin使ってやるのとなんら変わっとらん
0313デフォルトの名無しさん
垢版 |
2020/03/10(火) 14:03:39.54ID:0m+9gBGV
>>312
あのさ、おまえ頭悪いよ?
目的を一番ラクに実現する方法が
目の前にあるというのにそれを使わないのはアホだろ
ネイティブのPerlを使えばいい
今更PerlのWindows移植版なんかいらんよ。
Windows移植版なんてcygwinと何も変わらん
0314デフォルトの名無しさん
垢版 |
2020/03/10(火) 15:17:13.04ID:qHN38Ccx
>>311
試してみたけど確かに同じ配列が変えるね
オライリーのDBI本見たらそう書いてあった
selectrow_arrayって方を使ってリストコンテキストで受けるといいみたい
0315デフォルトの名無しさん
垢版 |
2020/03/10(火) 15:22:16.39ID:tTiB+rjP
>>314
やはりそうですか…
selectrow_hashrefを使うと$sqlでも$sthでも'A', 'B'それぞれの結果が返るので、selectrow_arrayrefだけ期待と違う動作をしている気がします。(バグ?)
0316デフォルトの名無しさん
垢版 |
2020/03/10(火) 15:28:19.27ID:qHN38Ccx
>>315
バグというか仕様だと思う
作者の書いたオライリー本にも書いてあったから意図的なはず
今更変更できないからこのままになってるんだろうね
0317デフォルトの名無しさん
垢版 |
2020/03/10(火) 15:39:16.84ID:tTiB+rjP
>>316
なるほど。
それでは今後、selectrow_arrayrefは注意して使うようにしたいと思います。
ありがとうございました。
0318デフォルトの名無しさん
垢版 |
2020/03/10(火) 15:58:50.16ID:SCW8qISh
>>313
へー
バッチファイル作ったりトリッキーな関連付けまでしないと動かないのが一番楽な方法ねー
cygwinで全く同じことができるしwin移植版perlならそのまま実行できちゃうんだけどね
ところでエクスプローラからどうやったらwsl内のファイルが見えるんだい?
0319デフォルトの名無しさん
垢版 |
2020/03/10(火) 16:50:47.58ID:lAAHr9o2
>>311
selectrow_arrayref は最初の1行しか返さないからということはない?
0320デフォルトの名無しさん
垢版 |
2020/03/10(火) 16:52:18.68ID:lAAHr9o2
ぐえ。リロード忘れたらとっくに話が終わっていて間に沢山の書き込みが
0321デフォルトの名無しさん
垢版 |
2020/03/10(火) 20:10:42.81ID:UzsfbeET
BOOKOFFに100円で売っていたPerl/CGI辞典によると、
selectrow_array:先頭行
selectcol_arrayref:最初のフィールド
selectall_arrayref:すべて
0322デフォルトの名無しさん
垢版 |
2020/03/10(火) 23:18:16.01ID:gGR9Cwad
>>318
Windows版Perl使って
Windowsで動かないーってやるより、
安心して使えるバッチファイルを使ったほうがシンプル
0323デフォルトの名無しさん
垢版 |
2020/03/10(火) 23:32:00.36ID:Z32YaYnf
いやいやw
WSLならバッチファイルなんか使わなくてもエクスプローラーからダブルクリックでWSL上のスクリプトを直接実行できるんでしょ?
やり方教えてよ
windows版perlならバッチファイルなんか使わなくてももちろん出来るからねw
それとwindows版perlだと何が動かないのかな〜?
0327デフォルトの名無しさん
垢版 |
2020/03/11(水) 00:05:26.96ID:5FVYO8f6
Ruby でも、MSYS2/MINGW は、日本語でバグル・日本語入力できない。
一方、WSL は、日本語でバグらない!

WSL が出たから、次第に、Windows 版のRuby Installer は、使われなくなっていく

それに、VSCode の拡張機能、Remote WSL が出たから、
Windows 10 では、Ubuntu 18.04 が標準になる

プロジェクトも、Windows 側のC: ドライブじゃなくても、
Linux 側に置いて、Remote WSL でアクセスできるので、本番環境に近い

Windows/Linux のファイルのアクセス権限の違いに、困らない!
0330デフォルトの名無しさん
垢版 |
2020/03/11(水) 01:05:10.04ID:zcf0ykb5
ハア?
WSLはwindows版perlより楽できるんじゃないの?
なんでわざわざそんな面倒なことすんの?
それとエクスプローラからWSLのファイルが見えてそれをダブルクリックで実行できるって話はどうなったの?
0331デフォルトの名無しさん
垢版 |
2020/03/11(水) 01:17:13.67ID:M00P+dL8
WSLはあくまでLinux的システムなアプリであって、Windows側とはやっぱり高い壁がある、と思っとくほうが安全やろ。
0332327
垢版 |
2020/03/11(水) 01:47:27.51ID:EKM5ywjJ
Ruby なら、WSL から、1-liner で、
Rubyで作られた遅いウェブサーバー、WEBrick が起動する

index.html が、Windows 側のC: ドライブにあるとすると、
cd /mnt/c/〜 で、Windows側へ移動して、

または、index.html が、linux 側のドライブにあるとすると、cd で、そこへ移動して、

ruby -run -e httpd . -p 8080

これで、Windows側のブラウザで見れる
http://localhost:8080

つまり、プロジェクトが、Windows/Linux側のどちらにあっても、Windows側のブラウザで見れる
0333デフォルトの名無しさん
垢版 |
2020/03/11(水) 02:27:57.69ID:M00P+dL8
Webサーバーを経由すれば、ファイルが地球の裏側にあってもふつうに見れるなー。w
0334327
垢版 |
2020/03/11(水) 04:58:50.64ID:EKM5ywjJ
Linux 側のフォルダ内を公開した、Linux側のサーバーに対して、

Windows 側のブラウザのlocalhost で見れるんだよ!!
0335デフォルトの名無しさん
垢版 |
2020/03/11(水) 09:27:01.95ID:AZbrV/6V
>>319
>>321
返信ありがとうございます。
すみませんが、selectrow_arrayrefが最初の1行しか返さないということは知っています。
そうではなく、結果(リファレンス)を変数に入れてから再度同じステートメントハンドラでselectrow_arrayrefを使用すると、リファレンス実体の方が書き換わってしまうので、1回目の結果が失われてしまうということを言いたかったのですが…。
サンプルとして'パラメータ付きクエリ'と書きましたが、複数行を返さない単純な「SELECT ?」でも再現します。
0336デフォルトの名無しさん
垢版 |
2020/03/11(水) 09:44:35.82ID:LRW51TqV
なるほど。
0337デフォルトの名無しさん
垢版 |
2020/03/11(水) 20:46:52.86ID:M00P+dL8
>>335
同じ変数を使い回しまくって、パフォーマンスを落とさないためやないの?
GCのないPerlならたいしてかわらんやろけど。
0339デフォルトの名無しさん
垢版 |
2020/03/11(水) 23:17:22.77ID:k/ve+D91
>>335
クエリ結果を保持してるのはステートメントハンドラオブジェクトの方でパフォーマンス優先のためにその内部変数のリファリンスを返すのが*_arrayrefって考えればいいかな
んでselectrow_arrayrefの第1引数に文字列を渡したときは内部で毎回prepareされるので後から実行しても書き変わらないと
0341デフォルトの名無しさん
垢版 |
2020/03/12(木) 01:44:08.97ID:NTVlQfwP
第一引数に$sth渡せるんだって思ったね
文字列しか渡したことないし
Perlはいまだに知らないことがある
0342デフォルトの名無しさん
垢版 |
2020/03/12(木) 09:49:43.58ID:05BordF4
>>339
そうですね。
DBI.pmで第1引数がリファレンス(ステートメントハンドラ)ならそのまま使用、そうでなければprepareしているところまではわかったのですが、その後の流れは同じのようでしたし、Driver.xstまで解析するのはやめておきました(^^;)
0343デフォルトの名無しさん
垢版 |
2020/03/12(木) 16:51:12.87ID:XWa7Kkjq
>>340
そういう時は
How dare you?
と言う。
0344デフォルトの名無しさん
垢版 |
2020/03/12(木) 16:52:32.93ID:XWa7Kkjq
あ、記号まつがえた。
0345デフォルトの名無しさん
垢版 |
2020/03/12(木) 17:18:02.38ID:+5N6GCV3
関連付けの仕組みを知らない人がいるのかな?
単にレジストリに、この拡張子はこのコマンドで実行するって書くだけなんだけど
0346デフォルトの名無しさん
垢版 |
2020/03/12(木) 17:18:57.67ID:+5N6GCV3
つまりcmd。exeから実行できるものは全て
同じやり方で関連付け作れるってことね
0347デフォルトの名無しさん
垢版 |
2020/03/12(木) 18:12:19.10ID:XQbCK6u3
それはただの起動のしくみでしかない。
実際の動作は高い壁で分離されてるといって過言でないものをいっしょくたにはできまい。
0349デフォルトの名無しさん
垢版 |
2020/03/12(木) 18:49:23.71ID:U4j5Oz8o
そもそもダブルクリックできるなんて
起動の仕組みなんだから、起動の仕組みでしか無いと言われても
その話をしてるんですよとしか言いようがないがw
0353デフォルトの名無しさん
垢版 |
2020/03/12(木) 20:49:28.83ID:U4j5Oz8o
ダブルクリックてエクスプローラーの話じゃん
エクスプローラーから見れるなら、ダブルクリックして開ける。
その証拠にテキストファイルだって開けるだろ
0363デフォルトの名無しさん
垢版 |
2020/03/16(月) 09:00:22.83ID:m2o8L3Qu
>>355
ここに書き込む前に、perldocを嫁
If using crypt on a Unicode string (which potentially has characters with
codepoints above 255), Perl tries to make sense of the situation by
trying to downgrade (a copy of) the string back to an eight-bit byte string
before calling crypt (on that copy). If that works, good.
If not, crypt dies with Wide character in crypt .

おそらく、crypt はPOSIXの仕様に合わせているから、こうなるのではないかと思う。
0364デフォルトの名無しさん
垢版 |
2020/03/16(月) 19:53:11.24ID:jMV62GuM
128-255を渡しても止まるんだけどね
エラーが出るとかじゃなくて異常終了する
仕様だとは思い難い
0365デフォルトの名無しさん
垢版 |
2020/03/16(月) 20:07:47.98ID:O3TrJAsg
「異常終了」じゃなくて、「die」してるんちゃううんか?
>>363にもそう書いてあるやろ。

トラップしたけりゃevalしろ。
0366デフォルトの名無しさん
垢版 |
2020/03/16(月) 20:22:32.11ID:jMV62GuM
die すると何かエラーメッセージ出しておとなしく終了するんじゃないのか?
windowsに怒られとるぞ
0367デフォルトの名無しさん
垢版 |
2020/03/17(火) 00:31:17.78ID:WzQFj8c+
この言語はなにが起こるかわからんので基本evalで囲わないとやってられませんね
0368デフォルトの名無しさん
垢版 |
2020/03/17(火) 00:59:40.01ID:DZYZalLc
トラップでevalってなんだっけ?w
Perlやめてから結構立つから忘れた。
なんかそんなのあったなwww

今?Perlからシェルスクリプトに回帰していますがなにか?
0370デフォルトの名無しさん
垢版 |
2020/03/17(火) 08:02:58.85ID:sAGmKBfN
エラーが返るならtryできるだろうけど、試してみたら異常終了するようなもんも避けられるのか?
0374デフォルトの名無しさん
垢版 |
2020/03/18(水) 09:12:43.24ID:SzV6uL92
Windows10、activeperl 5.20なんだけど、次のコードできちんと動く。何が問題なのか解らない。

$res = eval {crypt('aaa', 'ppp')};
print "1. $res\n";
$res = eval {crypt('aaa', 'あ')};
print "2. $res\n";
$res = crypt('aaa', 'ppp');
print "3. $res\n";
$res = crypt('aaa', 'あ');
print "4. $res\n";
__END__

1. ppFj4OYENOP9c
2. 縺VSnoxRf90hw
3. ppFj4OYENOP9c
4. 縺VSnoxRf90hw
0376デフォルトの名無しさん
垢版 |
2020/03/28(土) 10:30:07.37ID:gZJzrXqn
検索が遅い
いろんな条件に対してファイル全体を検索、ということをする時に、
OSのキャッシュに頼って毎回 `grep` する方が速い
メモリに読み込んで検索すると負ける
ループで$data[$i] =~ /$pattern/ した方がまだ速くて、
grep {/$pattern/} @data するともっと遅くなる

大量一括検索の高速化のテクニックみたいなの何かあるのかな
0379デフォルトの名無しさん
垢版 |
2020/03/28(土) 19:23:29.33ID:gZJzrXqn
MCE::GrepはCPUの使用率は上がるけど遅くなった
grepよりは正規表現の処理のあたりが時間かかってるんだと思う

感覚的にはもっと高速でも全然おかしくない感じなのに
0380デフォルトの名無しさん
垢版 |
2020/03/28(土) 19:34:33.22ID:gZJzrXqn
100MBのファイルからパターンに合う行を全部抽出するのに1秒かかるくらいの感じ
で、パターンが250もあるから、コーヒーが飲めるくらい待たされる
0383デフォルトの名無しさん
垢版 |
2020/03/28(土) 21:55:00.53ID:gZJzrXqn
同じパターンで繰り返し検索するのではなくて、
いろんなパターンで同じ対象を検索するので、コンパイルはできない

でも、パターンのリストは実行前に確定しているので、
qrで作ったものを配列に持たせておけば速くなるだろうか
0385デフォルトの名無しさん
垢版 |
2020/03/28(土) 23:24:04.96ID:ZQFwrOhU
パターンの内容にもよるが、flex で書いて Inline::C で呼ぶという方法もある。
0386デフォルトの名無しさん
垢版 |
2020/03/28(土) 23:25:40.33ID:7nefda3x
色んなパターンで?
grep -f でパターン読ませてやるのと同じか?
0387デフォルトの名無しさん
垢版 |
2020/03/29(日) 09:15:52.43ID:9AyQFVoq
素の Perl は NFA だけだから、どうしても速度的には不利になる。
パターンが250もあるなら尚更だ。
grep との差はPerl と C の差はもちろんあるだろうが
DFA でできるパターンなら、その差が大きいと思う。
0388デフォルトの名無しさん
垢版 |
2020/03/29(日) 09:42:19.51ID:aacnUCYv
linuxだったら素直にgrep呼べばいいだけだけど、
windowsだと素性が良くて高速なgrepを探すところでまず困難がある
さらに、grepに引数を渡すところにもエスケープ文字の困難があって、
結果の受け取りにも文字コードの困難が
0390デフォルトの名無しさん
垢版 |
2020/03/30(月) 00:14:28.89ID:mvvN5DTM
perl の Memoize は関数全体に掛けるようですが、
ruby の @memo、javascript の memo の変数に掛けるのは新し目の使い方でしょうか
0391デフォルトの名無しさん
垢版 |
2020/03/30(月) 04:32:31.95ID:PdZ6Klrm
>>388
WSLのUbuntuだとどうなのだろうか?
あれ遅い?
0392デフォルトの名無しさん
垢版 |
2020/03/30(月) 08:35:14.72ID:3FWyQXw7
NFA でなければならない理由がないなら DFA にするだけで速度 1000 倍は堅いかも。
でも Perl のままでも正規表現のチューニングは可能だ。まだやってないならね。
実際に使ってるパターンを見せてもらわないことにはなんとも言えないが。
0395デフォルトの名無しさん
垢版 |
2020/04/22(水) 13:25:13.88ID:gkB+0fgm
@array = ($str =~ /(PAT1).+?(PAT2).+?(PAT3)/g);
みたいにすると、パターン3つ分が配列に入るけど、他にもマッチするとそれも続けて入る
できれば2次元配列になって欲しい
そんな技はある?
0397デフォルトの名無しさん
垢版 |
2020/04/22(水) 19:29:55.51ID:gkB+0fgm
可能?

$str = '1a2b3c1x1d2e3f1g2h3i';
を与えられて
[[a, b, c], [d, e, f], [g, h, i]]
を得るにはどうすれば
0400デフォルトの名無しさん
垢版 |
2020/04/22(水) 20:56:31.77ID:gkB+0fgm
でも判った
普通に$1使えばいいだけか
結果を一つずつスカラに取るんだと思ってた
0402デフォルトの名無しさん
垢版 |
2020/04/22(水) 21:27:03.82ID:gkB+0fgm
結局コードはあんまり変わらなくて、ループで
push @array, ($1, $2, $3)
にするか、後で
splice(@elements, 0, 3)
を使っていくかの違い

パターンを3つから4つに増やした時に、
$4を追加するか、3を4に増やすかのメンテはやっぱり必要
いきなり2次元配列が得られるスマートさからは劣る
0403デフォルトの名無しさん
垢版 |
2020/04/22(水) 21:30:34.59ID:WLkEu+yG
どうやら今回は必要ないみたいだけど事前にグループの個数が
判らないという前提なら @- とか見ればいい。
あるいはグループに名前を付けて %+ を使えばいい。
全部ここに書いてあるよ。
https://perldoc.jp/pod/perlretut
0405デフォルトの名無しさん
垢版 |
2020/04/22(水) 23:57:47.29ID:WLkEu+yG
名前を付けるような性格のものじゃなくて個数が変わる可能性があるなら
個数だけ与えてパターンを組み立てればいいよ。
$1,$2 とか書かなくても
map { ${$_}} 1 .. $n
で同じことができるし。
リストコンテキストで配列に入れてから splice する方がいいと思うならそうすればいい。
0408デフォルトの名無しさん
垢版 |
2020/04/23(木) 12:10:21.89ID:2vqGx7d4
完全に数値って決まってるんなら、俺ならsplit使っちゃうな
@a = split /\d/, $str;
まあこんな単純な話じゃないんだろうけど
0409デフォルトの名無しさん
垢版 |
2020/05/01(金) 10:49:51.92ID:baJ3Dlo6
activeperlで
$res = `exefile $file`;
みたいなことをした時に、
コマンドプロンプトからスクリプトを起動するとちゃんと動く
でも、スクリプトをランチャーから起動するとno such fileになる
ファイル名が英数ならどちらもok
2byte文字が混じると挙動が変わる

起動の仕方によってパスの取り扱いとか変わる?
0410デフォルトの名無しさん
垢版 |
2020/05/01(金) 12:19:28.98ID:baJ3Dlo6
あ、違う
2byte文字ではなくドライブの違いだった
ネットワークドライブにあるとアクセスできない
コマンドプロンプトからならできる
0411デフォルトの名無しさん
垢版 |
2020/05/01(金) 13:08:35.22ID:baJ3Dlo6
結局、ランチャーに管理者権限が付いてるのが原因

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
EnableLUA 1 -> 0
これで解決する
perl関係ない
0412デフォルトの名無しさん
垢版 |
2020/05/01(金) 13:13:09.83ID:9YL7RFP8
ランチャー自身か、ランチャーの起動方法がよくないんやろ。
ネットワークドライブの認証(ログオン)かそのタイミングがあやしい。
0414デフォルトの名無しさん
垢版 |
2020/05/10(日) 19:19:00.31ID:gcVsfbhd
質問させてください。
WindowsでActivePerlを使っています。
perl で、あるファイルを、関連付けられたアプリケーションで開く
には、どのようにすればよろしいでしょうか?

例えば、xx_system('foo.txt') のようにすると、'.txt'に
関連つけられたアプリケーションで、'foo.txt'を開くような
動作を実現したいのですが。
0417デフォルトの名無しさん
垢版 |
2020/05/28(木) 11:01:17.93ID:5kmQgXWn
最近 python を使い始めたんだけど、使うほどに perl 凄げーって思う。
perlって細かいこと気にしないでも書けるって感じ。
まあ、 python に慣れてないってのもあるけどw
0418デフォルトの名無しさん
垢版 |
2020/05/28(木) 12:00:57.19ID:yN32+nQR
細かいことを気にしないせいでバグの原因になるので、
きちっとしか書けないようにした

perlの不満を解消してもっと簡単に書けるようにしたのは、
rubyの方が正常進化だと思う
0420デフォルトの名無しさん
垢版 |
2020/05/28(木) 12:49:38.27ID:MEC8WK3T
Perl は、暗号のような記号が多いから、皆嫌う

Ruby は可読性を上げるために、それらの記号を無くそうとしている
0421デフォルトの名無しさん
垢版 |
2020/05/28(木) 13:57:57.17ID:EGYBOXys
>>420
変数の型を知るのに
宣言まで見ないとわからないのがJava
代入まで探さないとわからないのがpython
見るとその場でわかるのがperl
宗教論争は終わらない
0424デフォルトの名無しさん
垢版 |
2020/05/28(木) 20:04:53.96ID:EYUPTTzW
んなこたーない
0426デフォルトの名無しさん
垢版 |
2020/05/28(木) 20:21:04.17ID:yN32+nQR
ロジックが逆だ
perlが型が判るからマウスを触らないのではなく、
マウスを触らないで作ったからマウスなしで型が判るようになってる

MT免許だからといってATに乗ってはいけない訳ではない
0427デフォルトの名無しさん
垢版 |
2020/05/29(金) 20:28:53.39ID:Ey9K/+fw
Perl の IDE って、どんなのがある?

Eclipse とか IntelliJ IDEA のプラグインで使えたとは思ったが、拡張子を .pl にしておかないと Perl だと判別してくれなくて
ただのテキストファイルと認識されちゃって使い辛いなと思ったことはあるが、もっとまともなのある?
0432デフォルトの名無しさん
垢版 |
2020/05/29(金) 21:36:34.81ID:8nIWWcW2
perlはvimで書く。
お兄さんとの約束だよ。
0436デフォルトの名無しさん
垢版 |
2020/05/30(土) 00:31:15.77ID:pcDYqVj5
ソースは付ける
実行ファイルは付けない
スクリプトはソースよりも実行ファイル寄り
0437デフォルトの名無しさん
垢版 |
2020/05/30(土) 00:42:58.21ID:h6ZQaP0H
拡張子つければ伝わるであろう情報を削るとか
一人で管理してるサーバならいいけど
そうじゃなきゃ害悪だと思う
0438デフォルトの名無しさん
垢版 |
2020/05/30(土) 01:44:27.37ID:UYDx2q8r
人間がエディトするファイルは付ける
人間がエディトしないファイルは付けないんじゃないの?
0439デフォルトの名無しさん
垢版 |
2020/05/30(土) 01:51:00.93ID:h49XlInt
運用においては、実行ファイルの実装方法なんかどうでもいい。
むしろ、実装方法を変えたら、ファイル名も変わるほうがはるかに害悪。

たとえば、シェルスクリプトをPerl スクリプトに変えただけで、そのスクリプトを使っているところをすべて変更しないといけなくなる。
0440デフォルトの名無しさん
垢版 |
2020/05/30(土) 03:26:43.00ID:k7WMMDxu
昔々 MS-DOS (更にそれの元になった CP/M)はファイル名に固定で3文字の拡張子があり、
それによって実行ファイルかどうかを判定していて、Windows はそれを引き継いでいるので
拡張子を使っているだけ。

UNIX系OSはそもそも拡張子という概念はなく、実行ファイルは実行パーミッションのビットが
立っているかどうかで判定していた。C言語のソースに .c を付けたりはするが、あれは拡張子
ではなく接尾辞で主に人間やそれを読むコンパイラ等がファイルの種別をファイル名から判断
するためにある。だからOSから見たら .c の部分に特別な意味はなくファイル名の一部でしかない。

Windows だと例えば .exe のファイルなら .exe を抜いた拡張子なしのファイル名を指定して
OSに実行させる事は可能だが、これはOSが拡張子部分を特別扱いしているからだ。
UNIX系OSではそのような方法では実行できずファイル名を全て指定する必要がある。xxx.pl なら
xxx.pl と指定する必要があり xxx のみでは実行できない。その代わり実行パーミッションが立って
いればファイル名がどうであろうともOSはそれを実行しようとする(実際に実行できるかどうかは
ファイルの内容による)。
0441デフォルトの名無しさん
垢版 |
2020/05/30(土) 08:54:37.07ID:Noe/rV9t
拡張子が無くても判定できるようにすればいいんじゃないの? Emacs みたいに。
0448デフォルトの名無しさん
垢版 |
2020/05/31(日) 02:15:32.98ID:MeZ7svrP
言語変えて作り直すって、俺の感覚ではシステム置き換えのイメージだわ
コンパイル済みのバイナリならともかく、スクリプト言語動かすって環境づくりも入るじゃん
0449デフォルトの名無しさん
垢版 |
2020/05/31(日) 02:44:16.68ID:pTVQa+4z
>>445
>>440に書いてあること読んでないだろ。
0450デフォルトの名無しさん
垢版 |
2020/05/31(日) 03:40:37.55ID:qe5b9Icc
その前って何?
だからシェバン使えば拡張子なんか使う必要はないってことだよ?
>>439みたいな書き換えはいらないってことを言ってる
あと自演して書き込みは見苦しいぞ
0451デフォルトの名無しさん
垢版 |
2020/05/31(日) 04:22:23.87ID:fhA8y4ka
読解力理解力がなくて、複数から指摘されたからって、自演扱いで返すとは見苦しいぞ。
0452デフォルトの名無しさん
垢版 |
2020/05/31(日) 05:26:43.75ID:pTVQa+4z
>>450
それ何のOSでの話?
0453デフォルトの名無しさん
垢版 |
2020/06/11(木) 19:05:11.82ID:5cioSHJn
「local $| = 1;」と言う記述見たんですけど、
「$|」の局所化って意味あるのでしょうか?
ただ単に「$| = 1;」と等価であり「local」を記述しても無駄な気がするんですけど、
私の勘違いでしょうか?

「local $| = 1;」とやることで、
そのファイルの出力だけみたいな感じになるのですか?
となると、
同プロセスなのに標準出力バッファが出力毎に別個に用意されてる事になってしまいますよね?

分かるかた教えてください。
0456デフォルトの名無しさん
垢版 |
2020/06/11(木) 19:53:05.96ID:L2GhQgnz
なんとなく直感的にグローバル変数だけだと思ってた
だから元の値を退避しておくという発想の方が自然
わざわざぶつけて便利に使おうという発想はいずれバグる
0457デフォルトの名無しさん
垢版 |
2020/06/11(木) 20:13:03.35ID:5cioSHJn
>>454
レスありがとうございます。

「もとの値に戻る」と言う事は、a.plから参照される異なるスコープのb.pmがあり、
b.pmに「local $| = 1;」の記述があった場合、
b.pmに定義されたサブルーチンが呼び出される毎に、
「$| = 1;」と同等の処理が行われ、
戻る際には元の値がセットされるのでしょうか?
それとも、スコープによって異なる「$|」を、
標準出力側でスコープ毎に切り替えてるという事でしょうか?
0459デフォルトの名無しさん
垢版 |
2020/06/11(木) 21:09:21.20ID:5cioSHJn
>>458
まぁ、そうですよね。無駄な処理になるし後者ですよね。
(OOP的に言うと、スコープ毎のインスタンスを参照的な)
ありがとうございました。
0460デフォルトの名無しさん
垢版 |
2020/06/11(木) 22:40:57.89ID:zOJFiWlV
>>456
Perlにあっては「わざわざ」ではない。
localはダイナミックスコープ、my/ourはレキシカルスコープであることは意識しておくべき。
0461デフォルトの名無しさん
垢版 |
2020/06/12(金) 02:39:58.45ID:TN61WwYv
宜しくお願いします。
$1をクリアしたい場合は「'' =~ /()/;」等として
無駄なマッチングをして空文字列を設定しないとダメですか?
数億件のデータを捌く際とか、めちゃくちゃタイムロスになりますよね?
皆様はどうされてるのでしょう?
0462461
垢版 |
2020/06/12(金) 02:41:54.90ID:TN61WwYv
>>461
↑に追記です。
$2以降のクリアも含めてお願いします。
最適な解を頂ければ幸いです。
0463540
垢版 |
2020/06/12(金) 02:51:00.48ID:OceO7BHX
>>461
まず、scalar変数の場合
=()はできない

=''や""は明示的に空文字列を設定することになる

なので既存変数をクリア、というか不定状態に設定するには
= undef;

あるいは数値を設定するためのシンボルを値0に戻すには
= 0;

undefは値として評価されれれば0,文字列として評価割れれば空文字列''が返った
(と思う)
0464デフォルトの名無しさん
垢版 |
2020/06/12(金) 03:17:40.95ID:O2sQpJVa
答えではないのだけれど、そういう場面に遭遇したことがないんだよね
簡単でいいのでどんな時に必要なのかしら?
0465461
垢版 |
2020/06/12(金) 03:24:01.31ID:TN61WwYv
>>463
あの…すみません。
スカラー値の評価の話をしている訳ではありません。
$1や$2や$3と言った特殊変数の値をクリアをする方法を聞いています。
これらの特殊変数に値を代入したらエラーになります。

引き続き>>461-462のベストな解をお待ちしています。
宜しくお願いします。
0466461
垢版 |
2020/06/12(金) 03:52:20.68ID:TN61WwYv
>>464
計 数億件のデータがあり、
それぞれにはCのラベルのような項目名がありまして、
それに続く文字列がその項目の値になるのですが、
(例えば「name: value…\n」な感じです)
これを一時的にDBに収めるためnameをキーとしてライブラリに渡したいんです。
一般的に思いつく方法としては、
「if( $ln =~ /^(パターン)://g ){ func( $1, $ln ); … }」
とすれば良いのですが、
なにせ件数が多いので、無駄な条件文を省きたいのです。
(条件文は処理が重いので)
検証実測値では1日以上の処理速度差がでるかもなのです。
(他にも同等の処理があるのでかなり省ける感じがするんです)

func()は、キーや値が未定義値もしくは空値であれば、
なにも処理をせず抜けるので、
$1がクリアできればif文を無くすことが出来ます。
そこで思いついたのが、
>>461の「'' =~ /()/;」ですが、これでは本末転倒です。

と言うのが経緯です。
0467デフォルトの名無しさん
垢版 |
2020/06/12(金) 04:05:50.63ID:Cyxf//AW
>>465
そもそも、$nはマッチしたときのみ参照する変数であるから、わざわざリセットする必要がない。

if (m/(.*)/) {
say $1;
}

これ以上の回答は>>464に答えてから。
0468デフォルトの名無しさん
垢版 |
2020/06/12(金) 04:13:00.69ID:Cyxf//AW
あら、いきちがった。。。

そういう話であれば、気にするな、ってところやろ。w

オレの感覚では、ifで判定して関数を呼び出さないほうが速そうだと思うがなあ。
Perlの処理としては、関数からすぐ戻ると言っても、呼び出しもそこからの戻りもそんなに軽くはなかったような。

「かも」とか言ってないで、真剣ならまず計測してみろ。
0469デフォルトの名無しさん
垢版 |
2020/06/12(金) 05:15:54.75ID:O2sQpJVa
説明してくれたけど、やっぱイマイチ分からん
$1をクリアして無条件でfunc( $1, $ln )を呼び出したい、ということかしら
その時funcは通過するだけ、と
パフォーマンスを気にするならやっぱり $1 && func( $1, $ln )とかの方がいいと思うけどな
多分、何か事情があるのでしょう。
美しくはないけど'' =~ /()/;なら誤差の範疇と思いますよ。
数値としてはベンチマークで
0472デフォルトの名無しさん
垢版 |
2020/06/12(金) 05:38:56.76ID:O2sQpJVa
答えじゃないんだけどさ、
$x = $ln =~ /^(パターン):/ && $1
これで以降は$xを使う、とか。
0473デフォルトの名無しさん
垢版 |
2020/06/12(金) 05:48:44.96ID:P559B0Rd
え、array使わないの?
俺としては

($label) = $ln =~ /^(パターン):/;
func($label, $ln) if $label;

を推したい
0474デフォルトの名無しさん
垢版 |
2020/06/12(金) 07:57:32.00ID:kFexpNJ3
Ruby で特殊変数などは、スレッドローカル変数だから、
マルチスレッドでも共有しないから、安全だけど

特殊変数をクリアする必要など、考えたこともない
0475デフォルトの名無しさん
垢版 |
2020/06/12(金) 09:26:27.43ID:Xic6e0Vs
マッチに失敗してるのに古い$1を使ってしまって、
みたいなケースはちょいちょいあるな

それはクリアしてなかったからではなくて、失敗をトラップしてないバグ
0476デフォルトの名無しさん
垢版 |
2020/06/12(金) 13:25:45.07ID:Qkj+08r5
>>466
もうCで書いちゃえよ。速いよ。
コロンまでの文字列抜き出すのは簡単だろう。
0477デフォルトの名無しさん
垢版 |
2020/06/12(金) 13:29:01.14ID:Qkj+08r5
速くしたいなら正規表現でマッチするかどうかなんてことやることそのものが間違いだとも思える。
同じPerl使うのであってもindex関数使うとか、他にやりようがあるんじゃないか?
0478デフォルトの名無しさん
垢版 |
2020/06/12(金) 14:03:27.64ID:Xic6e0Vs
大量のデータを効率よく扱うのは、データベース構築するのが正解

個人が扱う範囲だと、テキストで持って全検索で困らないけど、
量が増えるとそのうち破綻する
0479デフォルトの名無しさん
垢版 |
2020/06/12(金) 14:24:52.04ID:uUh54YqY
>466

$ln =~ /^(パターン):|(.*?)/
にすると、「^(パターン):」にマッチしないときに$1を空文字にできる。
0480デフォルトの名無しさん
垢版 |
2020/06/12(金) 14:50:38.25ID:uUh54YqY
ただ、(試してはいないが)if文のオーバーヘッドより、
関数呼び出しのオーバーヘッドのほうが大きいと思うけどな。
0482デフォルトの名無しさん
垢版 |
2020/06/17(水) 18:41:04.46ID:TVwLVBUa
そんなデカいデータをよくパールでやるね。
C で書け。
0483デフォルトの名無しさん
垢版 |
2020/06/28(日) 09:30:04.48ID:mI+4+ud7
https://developers.srad.jp/story/20/06/26/1324207/
> Perl 7が発表される。実質的にはPerl 5系のリネーム
> ストーリー by hylom 2020年06月26日 17時08分
> 現代における素人にはオススメできない言語 部門より

現代における素人にはオススメできない言語
…なら、文字列処理をやりたい素人は何を学べばいいの?
0485デフォルトの名無しさん
垢版 |
2020/06/28(日) 13:29:12.55ID:3gXsrtkR
>>484
事情を知らなくても最新版だとわかりやすくするために。

Perl6、Rakuがあるなかで、Perl5と言われたら古いとかEOLとかの疑いを持たれかねんから。
それに、必要であれば非互換も?
0488デフォルトの名無しさん
垢版 |
2020/07/02(木) 21:44:39.67ID:wuNvV9ki
デフォルトの状態が変わるだけで
適宜オプションつければ後方互換も保てるらしいよ
Perlのこういうところ好きだわ
0489デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:31:08.07ID:yrmljXci
今のところは、な・・・
0492デフォルトの名無しさん
垢版 |
2020/07/04(土) 19:48:46.40ID:VctW6lO7
単純に過去を切り捨てたら、Rakuの二の舞になる。過去を切り捨てるのであれば、
Python に勝てる程度の言語仕様にしなければ、見向きもされないだろう。
しかし、それはもう既にPerlではないだろう。
0495デフォルトの名無しさん
垢版 |
2020/07/05(日) 01:06:23.02ID:BkxIDrcL
>>492
はい。
Wiki>「Perlに続く」という意味で、6月の次の誕生石(7月)のルビーから名付けられた
0499デフォルトの名無しさん
垢版 |
2020/07/06(月) 19:42:39.82ID:5vDJxItj
ま、いいじゃねえか。新しい言語が一つ増えたようなもんだし。
0500デフォルトの名無しさん
垢版 |
2020/07/06(月) 21:20:03.77ID:pEZsiPGN
>>498
「すべき」って、おまえは何様なんや?

やりたい人がやってただけ。
結果としてうまくいかなかっただけ。
0501デフォルトの名無しさん
垢版 |
2020/07/07(火) 18:34:24.36ID:e1WbjzO/
うまくいくべき
0504デフォルトの名無しさん
垢版 |
2020/07/07(火) 19:01:21.20ID:e1WbjzO/
俺様
0505デフォルトの名無しさん
垢版 |
2020/07/23(木) 01:04:36.09ID:2kWEZYuR
___________________________________________

/media/xxx/DVD_HDVR/HDVR_SOB/*.SRO
というのが動画本体で、
SROファイルの構造は
000000-00007F 東芝ヘッダ
000080-007FFF (データA)
008000-00807F 東芝ヘッダ
008080-00FFFF (データB)
010000-01007F 東芝ヘッダ
010080-01FFFF (データC)
となっていて、東芝ヘッダからみたオフセット0x1C番地にある0x40値を=>0x00に書き換えるそうです。
東芝ヘッダは1つのファイルに複数ある(?)そうで、それらすべてを書き換える必要があるようです



これをperlスクリプトでお願いします
0509デフォルトの名無しさん
垢版 |
2020/07/23(木) 19:25:52.21ID:2kWEZYuR
同じような目的の別のスクリプトです
これに近いイメージでしょうか
(全文書くとブロックされる)

_________________________________________________________

HR_MANGR.IFOのコピー禁止フラグ解除は、
0x20 0x2C 0x23のシーケンスを0x20 0x24 0x23 に変更
perlスクリプトの例は以下のとおり。
# freeifo.pl
# HR_MANGR.IFOの変換
use strict;
use warnings;
my $infile = "HR_MANGR.IFO";
my $buf;
my $sTarget = " ,#"; # 0x20 0x2C 0x23

# ファイルのオープン

# バイナリモードに変更
binmode INFILE;
binmode OUTFILE;
my $sizIFO = -s $infile;

# IFOファイルを読み込み

# 0x20 0x2C 0x23 の並びがあれば、0x20 0x24 0x23 に置き換え
#他にあれば継続、無ければ終了

# ファイルのクローズ
close INFILE;
close OUTFILE;
0510デフォルトの名無しさん
垢版 |
2020/07/24(金) 04:55:58.03ID:6ZonvnML
そうそう。そんな感じ。
まあ頑張って。
0511デフォルトの名無しさん
垢版 |
2020/07/24(金) 09:07:49.48ID:So4dssPK
書き換える番地は、N は、0 以上で、以下の法則か?
0x8000 × N + ( 0x80 + 0x1C )

つまり、ヘッダは必ず、0x8000 毎にあるのか?
0512デフォルトの名無しさん
垢版 |
2020/07/24(金) 11:24:40.72ID:JRbdBOQM
>>511
レスありがとうございます
________________________________________________

SROファイルの書き換え
  000000-00007F 東芝ヘッダ
  000080-007FFF (データA)
  008000-00807F 東芝ヘッダ
  008080-00FFFF (データB)
  010000-01007F 東芝ヘッダ
  010080-01FFFF (データC)
  というふうに、0x8000バイトで1セットとなっている。
  東芝ヘッダとは、0x80バイトからなるデータブロック。途中に## Toshiba 〜という文字列を含んでいる
  東芝ヘッダのコピー禁止フラグ(CPP)のあるオフセット0x1Cを 0x40 ⇒ 0x00 に修正。
0514デフォルトの名無しさん
垢版 |
2020/07/24(金) 11:40:12.29ID:61Z/1/Bp
数が多いとツール作った方が早い
手動でやってもツール作っても時間同じなら、ツール作った方がいい
仕事では、ツール作ったせいで余計に時間かかってもツール作る
0517デフォルトの名無しさん
垢版 |
2020/07/24(金) 15:39:03.44ID:EkE5sKTE
perl -e "binmode STDIN; binmode STDOUT; while (read STDIN, $_, 0x8000) { substr $_, 0x1c, 1, 0; print }" < IN > OUT
これが最短?
0518デフォルトの名無しさん
垢版 |
2020/07/24(金) 15:58:32.23ID:JRbdBOQM
>>517
レスありがとうございます
泣きそうです(解らなすぎて)

>>509のスクリプトはバイナリ修正したコピーファイルを作成するものでした
小さなファイルなので問題ないのですが、目的の対象ファイルは10GB~20GBもあるものなのでマネ出来ません
0520デフォルトの名無しさん
垢版 |
2020/07/24(金) 16:07:20.05ID:UzZpGBU/
>>515
なるほどね。しかし、perlが扱えるデータ量にも、よく解らない限界があって、
巨大なデータを突っ込むと勝手に途中で切られたりするみたいだよ。
巨大なデータを扱うなら、seek関数みたいな低水準な手法を使う必要があるかもしれない。
0521デフォルトの名無しさん
垢版 |
2020/07/24(金) 16:48:28.89ID:EkE5sKTE
直接書き換えたいならこんなとか?
perl -e 'open F, "+< IN"; binmode F; while ($l = read F, $_, 0x8000) { substr $_, 0x1c, 1, "\0";
seek F, -$l, 1; print F }'
0523デフォルトの名無しさん
垢版 |
2020/07/24(金) 17:06:42.97ID:JRbdBOQM
>>521
ありがとうございます
Fはファイル名でよろしいでしょうか?(素人でごめんなさい)

Can't find string terminator "'" anywhere before EOF at -e line 1.
となります
0528デフォルトの名無しさん
垢版 |
2020/07/24(金) 20:38:39.07ID:So4dssPK
Stream 処理なら、バッファサイズ分のデータを、読んでは捨ててを繰り返すから、
必要なメモリサイズは、バッファサイズ分だけ

それか、seek みたいに、その番地をシークして、そこだけ書き換える
0529511
垢版 |
2020/07/24(金) 21:01:04.13ID:So4dssPK
0x8000 は、32,768 バイトだから、32 KiB。
(ただし、Kib は、1,000 倍ではなく、1,024 倍)

32 KiB * 32 個 = 1 MiB

1 GiB なら、 32個 * 1,024 = 32,768個
10GiB なら、0x8000サイズのブロックが、327,680個もあるの?

データ部分は固定サイズなの?
変動サイズで、そのサイズがヘッダ内に記録されているとかじゃないの?
0530デフォルトの名無しさん
垢版 |
2020/07/24(金) 21:50:07.62ID:EkE5sKTE
まーだやってたのか
>>523

perl -e 'open F, "+< ファイル名"; binmode F; while ($l = read F, $_, 0x8000) { substr $_, 0x1c, 1, "\0"; seek F, -$l, 1; print F }'

がエラーになったのは Windows のコマンドプロンプトで試したんだろ
コマンドプロンプトでは ' でなく " を使ってこう

perl -e "open F, '+< ファイル名'; binmode F; while ($l = read F, $_, 0x8000) { substr $_, 0x1c, 1, qq/\0/; seek F, -$l, 1; print F }"

もちろん read や print は流れで残してただけでまったく必要ないから

perl -e "open F, q/+< ファイル名/; binmode F; seek F, 0x1c, 0; while (! eof F) { seek F, 0, 1; print F qq/\0/; seek F, 0x7fff, 1 }"

で十分なのは言うまでもない
コマンドラインで書き捨てじゃないならperl7で不可予定の F じゃなくて $fh にするかな
0531511
垢版 |
2020/07/24(金) 22:51:07.42ID:So4dssPK
くれぐれも、データのバックアップを取っておいてから、実験しろよ。
もし、プログラムが間違っていたら、回復できないから

そもそも、他人のプログラムの意味が分からないのに、
それをそのまま実行するのは、非常に危険!
0532532
垢版 |
2020/07/24(金) 23:35:26.56ID:Z8MDOpZc
Binary fileをupdateモードでopenして
目的の位置にseekしpackで元のファイルの内容を直接書き換える方法なら

ttps://docstore.mik.ua/orelly/perl/cookbook/ch08_14.htm
0533532
垢版 |
2020/07/24(金) 23:36:19.14ID:Z8MDOpZc
>>530 と内容が被った…orz
0536デフォルトの名無しさん
垢版 |
2020/07/24(金) 23:46:10.28ID:JRbdBOQM
>>530
検証に時間がかかってしまって返信遅くなりました
できました!! ありがとうございました!

推察の通りコマンドプロンプトでのエラーでした
本命のLinux(Ubuntu)の端末上からも書き換え成功しました
感謝です

ほかの皆様もありがとうございました
不愉快に感じた方も多かったと思います ごめんなさい

ここで「進捗状況表示(%)をさせるにはどうしたらいいですか?」とか聞くと嫌われることは、僕もいい大人なので知っています
0537デフォルトの名無しさん
垢版 |
2020/07/24(金) 23:48:59.17ID:JRbdBOQM
>>532
親切にありがとうございます
0538デフォルトの名無しさん
垢版 |
2020/07/25(土) 00:54:10.29ID:uhXYZAuD
進捗状況を表示させるには、最初にファイルサイズを取得する。
そして、データを書き換えるたびに、現在のseek 番地を取得して、

現在のseek 番地 × 100 / ファイルサイズ

例えば、300 × 100 / 1,000 = 30 %
0539デフォルトの名無しさん
垢版 |
2020/07/25(土) 01:23:46.28ID:c7rlqrmm
>>538
レスありがとうございます
本当にうれしいのですがド素人なので理解出来ないのです

>>530のコマンドラインに絡めるかスクリプトにしていただけると卒倒するほど喜びます
これを機会にperlを勉強したいと(心から)思いますが、今の段階ではこんな図々しいお願いをするしか出来ません
0543デフォルトの名無しさん
垢版 |
2020/07/26(日) 08:04:49.79ID:faz+YmuJ
進捗表示は、計算自体は簡単だけど、ちゃんと見えるように表示するのが
ちょっと面倒なんだよな
0545デフォルトの名無しさん
垢版 |
2020/07/26(日) 11:13:19.32ID:faz+YmuJ
そんなもんがいちいちあるのか
まあ、凝ったことをするなら共通化はするだろうけど
凝ったことしなくても、どういう頻度で表示するかとかの調整は必要で、
UI特有の機能と関係ない面倒臭さの部分なんだよな
0546デフォルトの名無しさん
垢版 |
2020/07/26(日) 13:26:52.37ID:y3z4IjvW
ターミナルの機能を使いきるなら面倒だろうけど、ただ垂れ流すだけなら簡単やろ。
0547デフォルトの名無しさん
垢版 |
2020/07/26(日) 18:32:06.33ID:hRZi6+cn
>>512
最適化するとすると手順はこんな感じかな。

1. 0x1c バイト読んでそのまま書く。
2. 1バイト読む。読めなかったら 5 へ。読んだ内容が 0x40 なら 0x00 に変えて書く。0x40 でなければそのまま書く。
3. 最大 0x7fff バイト読み、読めたデータをそのまま書く。
4. 2へ。
5. 終わり。

STDIN から読んで STDOUT で書くならこうなる。

read(STDIN, $buf, 0x1c);
print $buf;
while (read(STDIN, $buf, 1)) {
 print $buf eq "\x40" ? "\x00" : $buf;
 read(STDIN, $buf, 0x7fff);
 print $buf;
}
0548デフォルトの名無しさん
垢版 |
2020/07/27(月) 00:36:57.42ID:Y15FmTu1
>>530さんからの頂き物に、ファイルサイズを取得。。。まではできました(訳:パクれました
みなさんありがとう
し、進捗。。。
----------------------------------------------------------------
open F, "+< ファイル名";
binmode F;
my $filename = "ファイル名";
my $filesize = -s $filename;
print "$filenameのサイズは$filesizeです。\n";
while ($l = read F, $_, 0x8000) { substr $_, 0x1c, 1, "\0"; seek F, -$l, 1; print F }
0549デフォルトの名無しさん
垢版 |
2020/07/27(月) 01:28:37.03ID:KvYX/iYh
>>548
いい加減にしろ
0550デフォルトの名無しさん
垢版 |
2020/07/27(月) 07:32:32.55ID:X6EMHfht
readして変更しないところまでprintするのは無駄なのに
無駄を省けば進捗表示がいらないくらい高速化するだろうに
0551デフォルトの名無しさん
垢版 |
2020/07/27(月) 09:23:37.46ID:HYhflFVx
コピーを作っておいて、そのコピーの一部だけ変更して書き戻せば一瞬
信頼性が上がったら、コピーは作らずにオリジナルを変更する
0554デフォルトの名無しさん
垢版 |
2020/07/27(月) 18:21:31.29ID:Y15FmTu1
呼ばれた気がしたので
約10分のデータ(1.3GB)で比較しました

readあり

real 1m34.485s
user 0m0.888s
sys 0m6.100s

readなし

real 1m5.851s
user 0m0.340s
sys 0m3.563s

USB2.0()でUbuntuにマウントさせた外付けHDD上のデータを直接書き換えています
特殊なフォーマットなのでWindowsでは認識できないのです
0555デフォルトの名無しさん
垢版 |
2020/07/27(月) 19:14:13.61ID:KvYX/iYh
DRM解除の片棒担ぐ人達かね
0557デフォルトの名無しさん
垢版 |
2020/07/27(月) 19:46:48.42ID:Y15FmTu1
残念ながら暗号化解除まではされないんです
別の機器にコピーしようとしても「コピープロテクトがなんちゃら。。」と、ちゃんとハネられます
機器内の制限を緩くするためのオフホワイトな作業です
0558デフォルトの名無しさん
垢版 |
2020/07/27(月) 20:24:22.40ID:2I3xUck9
頭悪くてプログラムしかできなかった大企業CEO一覧
http://re-file.com/18k/1677/
0563デフォルトの名無しさん
垢版 |
2020/07/28(火) 00:29:51.31ID:cSYuj1Eq
>>557
お前は裁判になって負けたら責任全部背負うのか?
0564デフォルトの名無しさん
垢版 |
2020/07/28(火) 01:16:10.36ID:YHRj/bUX
責任w
0567デフォルトの名無しさん
垢版 |
2020/07/28(火) 01:48:48.45ID:R7vB/BT5
コピー許可するフラグをいじるのは私的利用の範囲なら自由じゃないですか?
ここでその方法を聞いたりその答えを書いたりした人がどうなるかはわかりませんが
0568デフォルトの名無しさん
垢版 |
2020/07/28(火) 02:17:19.93ID:F+mRlQPD
>>567
他人が使うためにプログラムを公開することに問題がないとでも?
0569デフォルトの名無しさん
垢版 |
2020/07/28(火) 02:23:12.72ID:p8KDyqHY
Winnyの作者は捕まるが利用者は捕まらない
包丁の販売は捕まらないか利用者は捕まる事が有る
YouTubeであるけど包丁を自作して販売したら捕まるのか?
0570デフォルトの名無しさん
垢版 |
2020/07/28(火) 02:35:26.47ID:R7vB/BT5
>>568
コピー許可フラグを取り除くプログラムを公開することは問題ありと見ているわけですね
確かに東芝の全機種に対して動作可能であるなら影響は大きそうです
0571デフォルトの名無しさん
垢版 |
2020/07/28(火) 05:40:11.08ID:U3aN9PuQ
おかしな雲行きになってきたので説明(釈明)を

まず第一に、このスクリプトだけでは目的を達成することができません
いくつか別ファイルを修正する必要があります
当然ながらこのスレではそれらは公開されていません
不完全な変なデータが出来上がるだけです

第二にこの手法が通用するのは、10年以上前に発売された「ある機種」のみです
次機種以降ではこの"バグ"はすっかり塞がれました
ディスクの中身をこれほどたやすく弄れるなんて話は聞いたことがないです
今現在どれほどの人がこの機種を使っているか知りませんが。。。

そしてこれは「暗号化解除」を目的としていません
ヘッダの一部分をちょっと弄っただけでプロテクトが外れるとか、幼稚園児ですか?
これはデータを細工して機器を「騙している」にすぎません
0572デフォルトの名無しさん
垢版 |
2020/07/28(火) 05:41:52.28ID:U3aN9PuQ
「暗号化解除ではない」と書いているのに裁判(w)とか責任(w)とか言ってる人って
字が読めないのか、頭が悪くて理解できないのか、あるいは目が見えないのか
10年前も当時の2ちゃんねる()で話題になって多くのスクリプトやプログラムも配布されました
彼らは訴えられたのかなぁ?心配です(棒

ついでに言えば
実は>>530は私です
壮大な自作自演です(今時)
進捗表示を教えてほしかっただけなのです。。。

みなさん釣り堀へようこそ

そして農家の朝は早い
0573デフォルトの名無しさん
垢版 |
2020/07/28(火) 05:43:41.18ID:U3aN9PuQ
それでは最後に

普段から社会にこれっぽっちも貢献してないくせに、こんな匿名掲示板で妙な倫理観や底が浅い正義感を振りかざすとか

以降、間抜けな人たちの「負け惜しみ」のレスが続きます
屁理屈、論点ずらし、人格否定など、つたない書き込みをしばらくの間お楽しみください
合わせて「おかしな雲行き まで読んだ」もお楽しみください
0574デフォルトの名無しさん
垢版 |
2020/07/28(火) 06:49:13.06ID:Z44sycP1
釣り堀する前に、Linuxインストールできるようになれよ。
0575デフォルトの名無しさん
垢版 |
2020/07/28(火) 07:03:33.82ID:U3aN9PuQ
Linuxで思い出したが、最新のUbuntuとかでは(仕様変更で)その機種の外付けHDDを「書き込み可」
でマウントできない
手動で”-RW”オプション付けてマウントしようとしてもダメ
書き込みできないからスクリプトもエラーになる
仕方ないのでUDF関連のソースファイルを弄ってカーネルをコンパイルしている
多分世界で私だけだと思う(そんな需要があるわけない)

>>574
頑張って
0576デフォルトの名無しさん
垢版 |
2020/07/28(火) 07:08:12.80ID:Z44sycP1
パソコンはコマンドが基本だからな。
コマンド出来るようになれよ。
0577デフォルトの名無しさん
垢版 |
2020/07/28(火) 07:37:42.56ID:s7pIWQUC
readの有無で差がなさすぎて信じがたいんで実験してみた

RAMディスクで fsutil file createnew data 2000000000 して

Measure-Command { perl -e 'open F, q/+< data/; binmode F; while ($l = read F, $_, 0x8000) { substr $_, 0x1c, 1, qq/\0/; seek F, -$l, 1; print F }' } | % TotalSeconds
2.8214867

Measure-Command { perl -e 'open F, q/+< data/; binmode F; seek F, 0x1c, 0; while (! eof F) { seek F, 0, 1; print F qq/\0/; seek F, 0x7fff, 1 }' } | % TotalSeconds
1.3621179

readしなくても32KB毎に書く時に読むだろうからこんなもんか
0578デフォルトの名無しさん
垢版 |
2020/07/28(火) 13:31:46.55ID:DVrEteyf
>>571
あんた誰?
0580デフォルトの名無しさん
垢版 |
2020/07/28(火) 15:14:32.97ID:DVrEteyf
ひみちゅ
0581デフォルトの名無しさん
垢版 |
2020/07/28(火) 16:12:16.22ID:7IzxJUwl
>>580
なんかこの人好きやわ笑笑
0582デフォルトの名無しさん
垢版 |
2020/07/28(火) 20:58:23.32ID:U3aN9PuQ
約13GBのデータで(usb2.0)

2ch配布Linuxネイティブアプリ@10年前 64bit版
 12m10.357s
Perlスクリプト readあり
 12m5.101s
Perlスクリプト readなし
 8m38.678s
0583デフォルトの名無しさん
垢版 |
2020/07/28(火) 21:18:54.63ID:LCUSVvjE
>>582
死ね、クズ
0584デフォルトの名無しさん
垢版 |
2020/07/28(火) 21:42:15.96ID:7IzxJUwl
>>583
ネットでの暴言はインキャがすること。
てめぇはこうなれ!!!
http://re-file.com/18k/1669/ (結構グロ)
0585デフォルトの名無しさん
垢版 |
2020/07/28(火) 21:51:29.80ID:rf/YfV6w
殺したいほど嫌悪するような事か?
おそらく心の病気だから早く病院行った方がいい
0586デフォルトの名無しさん
垢版 |
2020/07/28(火) 22:01:24.31ID:7IzxJUwl
>>585
あの〜傍観者なのですが、これって584と583
どっちに言ってるんですか??
0588デフォルトの名無しさん
垢版 |
2020/07/28(火) 22:27:18.25ID:7IzxJUwl
ネットはこうでなくちゃ!明日の学校めんどいけど、この争いみたら
楽になれる!
0591デフォルトの名無しさん
垢版 |
2020/07/28(火) 23:54:00.05ID:7IzxJUwl
>>590
福岡県福岡市東区在住
西南学院中学二年〇組テニス部
学力推移調査:225/223位
全教研赤坂本校筑女,西南合同vクラス
明日の時間割英会話.社会.聖書.体育
(保護者面談なので4限授業)
頭は悪いがプログラムができるのでマークザッカーバーグ
のように校内snsをつくって流行らせようとしてます笑笑。
昨日、無断で水曜日に部活休んだのでめちゃくちゃ怒鳴られました。
明日の聖書は、「手紙」というくだらない日本映画を見ます。
今日は一時から「爆笑問題カウボーイ」というラジオがあるので、
monsterのんでずっと起きてます。2年になって運が悪いことに親しかった
友達は2組と五組に分かれてしまい、僕だけ〇組という
辺境の地に飛ばされました笑笑。好きなアーティストは「ずっと真夜中でいいのに」
という顔出ししていないバンドです。さっき5chのずとまよ専用スレで顔写真をみて、
とても美人だったので今すごくうれしいです。好きなサイトは、「リファイル」というグロサイトです。
「西南学院中学2年という名前でコメント投稿してるので、グッドボタン押して下さい。
0592デフォルトの名無しさん
垢版 |
2020/07/28(火) 23:55:04.17ID:V3SVLGoH
>>590
学校の先生かも知れんよ
0593デフォルトの名無しさん
垢版 |
2020/07/28(火) 23:59:10.33ID:7IzxJUwl
ほんとに信じてくれ!
0594デフォルトの名無しさん
垢版 |
2020/07/29(水) 00:00:07.74ID:hFsck1GX
>>592
全然信じてくれんやん笑笑
0595デフォルトの名無しさん
垢版 |
2020/07/29(水) 00:01:21.85ID:hFsck1GX
>>591
というか、こんなにネットにさらすのはやばかったかな?
0596デフォルトの名無しさん
垢版 |
2020/07/29(水) 00:05:34.09ID:hFsck1GX
>>590
逆に聞きますが、あなた五十過ぎのオッサン
何ですか?( ´∀` )
0597デフォルトの名無しさん
垢版 |
2020/07/29(水) 00:11:56.16ID:g1h81RwA
>>593
リアル厨房なら、perlなんかやめたほうがいいね。
python のほうがずっと言語仕様が綺麗で、複雑な処理も簡単にこなせる。
今、perlを使っているのはな、20年前からperlを使ってて、
他の言語に乗り換える気力も失ったオッサンばっかりだよ。
0598デフォルトの名無しさん
垢版 |
2020/07/29(水) 00:13:37.08ID:CwVjY0Ri
蛇より真珠のがキレイだ
0599532
垢版 |
2020/07/29(水) 00:13:51.84ID:gNILtmsT
python, goなど他の言語もやってますが
0600デフォルトの名無しさん
垢版 |
2020/07/29(水) 00:19:14.22ID:hFsck1GX
>>597
最近はperlよりphpに力を入れてます
0602デフォルトの名無しさん
垢版 |
2020/07/29(水) 02:59:07.17ID:TsNd4noZ
Kotlinもよろしく
0603デフォルトの名無しさん
垢版 |
2020/07/29(水) 07:08:18.48ID:q44g7qzE
問題
----
$flags に格納されているフラグ 0x40 をリセットして 0x00 にする
次の3通りの処理から採用する方法を理由を添えて答えなさい

   a. $flags = 0x00
   b. $flags = 0x00 if $flags == 0x40
   c. $flags &= ~0x40
0604デフォルトの名無しさん
垢版 |
2020/07/29(水) 08:33:33.53ID:W2ZwK0DF
でも、そこだけ書き換えて、ちゃんと動いたの?

もし、チェックサムがあれば、エラーになるはずだけど
0605デフォルトの名無しさん
垢版 |
2020/07/29(水) 15:15:31.23ID:opF1rrDZ
>>597
個人的にはサーバプログラムはgo
時点でpythonかな
perlはlinuxなら環境を選ばないという点で、シェルスクリプトはperl一択
それぞれに良さがある
0606デフォルトの名無しさん
垢版 |
2020/07/31(金) 06:23:48.86ID:uvjudIRN
>>603
a, b は他のビットが0になっても良い場合、及びbは他のビットが0の場合に動く。
cは
あ、ちょっと今書いてる時間ない。誰か他の人よろしく。
0607デフォルトの名無しさん
垢版 |
2020/08/02(日) 05:05:52.61ID:IlYSPDQE
Cは他のビットを崩さずに 0x40 の所のビット(2進だと01000000)だけ0にする。
0608デフォルトの名無しさん
垢版 |
2020/08/02(日) 07:04:07.45ID:MjfLntA9
何を 0x00 にするのか不明確な時点で出題者の頭が悪い。
a を意図しているなら 0x40 は関係ないし
b を意図しているなら「0x40 をリセットして」ではなく「0x40 がセットされていれば」と
書かれていなければならない。
ひょっとして、元の値が 0 だったらリセットしたことにはならないということか?
c を意図しているなら他のビットが全部 0 の場合に限り「$flags の値を 0x00 にする」
ことになるだろうが、そのようには書かれていない。
$flags & 0x40 を 0 にするということなら、 0x00 と表記するのは
値としては同じでも適切な表記なのか疑問が残る。
しかしこれが最も無理のない解釈だろう。
こんなに忖度させるようでは出題者は落第だ。
0613デフォルトの名無しさん
垢版 |
2020/08/02(日) 12:40:43.04ID:L8TYFRoG
水掛け論でしょ 言語仕様を理解しないで適当に書いてちゃんと動くかどうかの話
0614デフォルトの名無しさん
垢版 |
2020/08/02(日) 12:45:33.70ID:Vanmrtqf
仕様からコードを自動生成すればバグらない
仕様はちゃんとしか書けないものとする
0616デフォルトの名無しさん
垢版 |
2020/08/02(日) 16:23:15.21ID:qo03Ruan
また釣りのクズか
0619デフォルトの名無しさん
垢版 |
2020/08/02(日) 18:07:45.30ID:JnzrulEq
>>617
死ね
0622デフォルトの名無しさん
垢版 |
2020/08/02(日) 19:41:56.53ID:hIQzyyzC
>>621
むしろ天才よりも秀才のほうやろ。
本当の天才はそういうことに関わらん気がする。
直感的に不可能か、現実的に意味がないかを悟っていそうというか。
0623デフォルトの名無しさん
垢版 |
2020/08/02(日) 20:29:18.39ID:Vanmrtqf
バグの無いことの証明が不可能なのは、
ゲーデルの不完全性定理とかあのへんまで突っ込んでいくからであって、
99.9%okなら良しとする現実世界なら普通に可能
0626デフォルトの名無しさん
垢版 |
2020/08/13(木) 15:32:24.87ID:g8OxF1lY
UTF8からShift-JISに変換し、その中で変換できなかった文字列はhtml数値文字参照に変換したいです

(UTF8)楽しいね🙂→(Shift-JIS)楽しいね🙂 ;
このような風にです

こちらのサイトを参考にして↓のように書いてみたのですが
https://blog.netandfield.com/shar/i/details/004482.html#home


use Encode;
my $word = "楽しいね🙂";
Encode::from_to( $word, "UTF8", "Shift_JIS", Encode::FB_HTMLCREF);
print "$word";

(結果)
?y??????🙂 ;

と、元の日本語が文字化けしてしまいます
どこを直せばいいでしょうか?

Perlのバージョンは5.18.2
Encodeモジュールのバージョンは2.49です
0627デフォルトの名無しさん
垢版 |
2020/08/13(木) 16:19:08.99ID:HLH3bdVq
その出力先(ターミナル?コンソール?)は、そもそもシフトJISテキストを表示できるのか?
できない場合は、プログラムは関係なく、ターミナルが文字化けする。

ためしにtext.htmlのようなファイルに出力してから、その内容を確認したら?
0628デフォルトの名無しさん
垢版 |
2020/08/13(木) 16:44:17.95ID:DQVPr3Tq
前にやろうとして諦めた
pythonだと簡単

try:
  str_sjis = str.encode("CP932")
except UnicodeEncodeError:
  print str.encode("utf-8")
0630デフォルトの名無しさん
垢版 |
2020/08/13(木) 17:00:11.25ID:g8OxF1lY
>>627
ターミナルです
ファイルに出力してそれをShift-JISとして開いたら文字化けもなく見ることができました
内部的には問題なかったのですね
ありがとうございました
0632デフォルトの名無しさん
垢版 |
2020/08/15(土) 08:35:13.06ID:ACgG3ouC
プロトタイプ属性の指定がどうやってもできん

use feature 'signatures';
sub foo :prototype($$) ($left, $right) {
return $left + $right;
}

これで構文エラーになる理由が全く分からん
0635デフォルトの名無しさん
垢版 |
2020/08/15(土) 14:02:00.78ID:ACgG3ouC
え????

use feature 'signatures';
sub NAME(SIG) BLOCK # with signature
sub NAME :ATTRS (SIG) BLOCK # with signature, attributes
sub NAME :prototype(PROTO) (SIG) BLOCK # with signature, prototype

構文こうなってるけど?
0636デフォルトの名無しさん
垢版 |
2020/08/15(土) 15:48:07.40ID:k2IZqmRY
以下のようなhtmlがあるとします
<div>
<p>AAA</p><p>BBB</p><p>CCC</p><p>DDD</p>
</div>
<p></p>の構文が4個の場合は、構文を文字列として2個ずつ別の変数に分けたいです。
($str1 に"<p>AAA</p><p>BBB</p>" 、 $str2に"<p>CCC</p><p>DDD</p>"
<p></p>の構文が6個の場合は3個ずつ、8個の場合は4個ずつ・・・と前半と後半で分けて
2つの変数に代入したいのですが、方法はあるでしょうか?
0638デフォルトの名無しさん
垢版 |
2020/08/15(土) 16:34:06.12ID:o+i8zw5r
釣りに引っ掛かるな
0639デフォルトの名無しさん
垢版 |
2020/08/15(土) 17:04:09.01ID:gFfdk9Ij
>>636
はい。あります。
0640デフォルトの名無しさん
垢版 |
2020/08/15(土) 19:50:33.78ID:dQrORRCv
ちょろい問題。単なる初心者で釣りなんかじゃないでしょう。

@foo = (); @bar = ();
while ($str =~ s{^[\s\S]*?<p>(.+?)</p>(.*)<p>(.+?)</p>[\s\S]*$}{$2}){
push @foo, $1;
unshift @bar, $3;
}
0642デフォルトの名無しさん
垢版 |
2020/08/15(土) 20:01:49.33ID:UM/CpThf
# 元ネタ
my $html = '<html><p>hoge1</p><p>hoge2</p><p>hoge3</p><p>hoge4</p><p>hoge5</p><p>hoge6</p><p>hoge7</p><p>hoge8</p><p>hoge9</p><p>hoge10</p></html>';

# 全部のpタグの中身を引っ掛ける

my @p_list = $html =~ /<p>(.+?)<\/p?/g;

# 引っかかった数取得

my $size = int(@p_list);

# 前半と後半に分けて突っ込む

my @mae = @p_list[0..int($size/2)-1];

my @ato = @p_list[int($size/2)..$size-1];

# 結果表示テスト


print Dumper([\@mae, \@ato]);
0643デフォルトの名無しさん
垢版 |
2020/08/15(土) 20:03:08.33ID:UM/CpThf
なんだこの糞改行(´・ω・`)


# 全部のpタグの中身を引っ掛ける
my @p_list = $html =~ /<p>(.+?)<\/p>/g;

# 引っかかった数取得
my $size = int(@p_list);

# 前半と後半に分けて突っ込む
my @mae = @p_list[0..int($size/2)-1];
my @ato = @p_list[int($size/2)..$size-1];

# 結果表示テスト
print Dumper([\@mae, \@ato]);
0645デフォルトの名無しさん
垢版 |
2020/08/15(土) 20:49:31.50ID:ODJGcA2C
>>644
まあ、そんなに巨大だったら、どっちにしろ死ぬやろけどな。w
本気で心配するならチビチビつままないと。
0646デフォルトの名無しさん
垢版 |
2020/08/16(日) 03:38:06.22ID:Degs0Zl8
Ruby の、Nokogiri で、スクレイピングしてみた

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<div>
<p>AAA</p><p>BBB</p><p>CCC</p><p>DDD</p>
</div>
EOT

p_tags = doc.css( "div > p" ) # div の直下のp
half_cnt = p_tags.length / 2

def make_p_str( ary ) # 要素の配列から、文字列を作る
str = ""
ary.each do |elem|
tmp = elem.to_html # 要素
tmp.chomp! # 末尾の改行を削除する
str += tmp # 連結
end
str
end

p str_before = make_p_str( p_tags[ 0...half_cnt ] ) # 前半
p str_after = make_p_str( p_tags[ half_cnt..-1 ] ) # 後半

出力
"<p>AAA</p><p>BBB</p>"
"<p>CCC</p><p>DDD</p>"
0648646
垢版 |
2020/08/16(日) 07:20:54.63ID:Degs0Zl8
Mechanize とか、curl + Nokogiri でも、静的なページなら、DOM を取得できるけど、

Ajax など、JavaScript で、動的にDOMを組み立てている場合は、
sleep するとか、Selenium WebDriver などを使わないと、DOMを取得できない

5ch などは、空のHTMLを送ってきてから、
Ajax で、ページの内容を取得しているから、
HTMLをスクレイピングするだけでは、タイミングによっては内容が存在しない
0649646
垢版 |
2020/08/16(日) 07:27:51.64ID:Degs0Zl8
Ruby で、curl, Nokogiri の例

require 'nokogiri'

html = `curl http://www.example.com/`
doc = Nokogiri::HTML( html )

elements = doc.css( "h1" )
puts elements.first.content #=> Example Domain

open-uri の例

require 'open-uri'
require 'nokogiri'

url = 'http://www.example.com/'
doc = Nokogiri::HTML(open(url))
0650デフォルトの名無しさん
垢版 |
2020/08/16(日) 07:29:48.83ID:Rc5RuLFB
プロテクトのつもりは無いんだろうけど、機械にやさしくない
最近だとメルカリのページ取得して、なんで空? と思った
0651646
垢版 |
2020/08/16(日) 09:02:04.52ID:Degs0Zl8
Selenium WebDriver なら、指定した要素が出現するまで、指定した時間だけ待ってくれる

漏れは、10〜20秒ぐらいを指定してる
0655デフォルトの名無しさん
垢版 |
2020/08/16(日) 15:22:58.74ID:9u3LM4y1
あんまりない
弱いのはライブラリ面なので言語的に不足してる機能はそれほどない
0657デフォルトの名無しさん
垢版 |
2020/08/16(日) 18:58:24.31ID:5UHvUqAR
なら、C++があれば他の言語は要らなくなる。
さらに極言すれば、アセンブラがあれば他の言語は要らなくなる。
0659636
垢版 |
2020/08/16(日) 20:53:31.17ID:we+09hKc
返信が遅くなってすいません
>>640,643,646
勉強になりました
ありがとうございました
0660デフォルトの名無しさん
垢版 |
2020/08/17(月) 01:24:18.13ID:U9ZmQUIp
GUI必要なツールはC#使うけど、CUIだけとか引数もなくて単に実行するだけとかそういうのだいたい全部Perlで書いてる
0661デフォルトの名無しさん
垢版 |
2020/08/17(月) 07:07:29.41ID:lN4Qioc8
GUIって結局、裾野の方々でも使えるようにする工夫であって、
テキストエディタで条件設定した方がよっぽど効率いい場合が殆どなのでは

自分専用ツールでGUIで作った記憶がない
0662デフォルトの名無しさん
垢版 |
2020/08/17(月) 07:25:27.72ID:KZ//oCQL
>>661
スマホのアプリはテキストエディタを使うのが主流か?
0667デフォルトの名無しさん
垢版 |
2020/08/17(月) 12:18:14.46ID:lN4Qioc8
噛みつかれた、と思っちゃうのが糖質なんだよな
書き込みがみんな攻撃に見えるっていう
0669デフォルトの名無しさん
垢版 |
2020/08/17(月) 14:26:41.31ID:MSHB+00t
>>667
わけがわからなすぎるからな。
攻撃に見えてもしゃあない。

オレには隙自語に見えた。

で、本人はどういうつもりなの?
0671デフォルトの名無しさん
垢版 |
2020/08/17(月) 17:15:38.44ID:fOsr3uhu
そうだねでいいんでね おれもそう思う
GUIがあった方がいいなって時はつければいいし
0672デフォルトの名無しさん
垢版 |
2020/08/17(月) 18:21:33.00ID:2KNIyB/f
あー。PerlでスマホのGUIか。書けたらいいな。
ていうか世界は広いからとっくの昔に誰かが作ってそう。
0674デフォルトの名無しさん
垢版 |
2020/08/18(火) 01:35:21.75ID:IZwRntbA
Perl(パール)[Pathological Eclectic Rubbish Lister]
Google翻訳[病理学的折衷的なゴミリスター]

どうしてこうなった?
0675532
垢版 |
2020/08/18(火) 02:10:03.41ID:B3TNMnkL
perlのguiといえばTk, Tkx, wxWdget, Qt, GTK …色々あって
やろうと思えばやれると思うけど。

オレはPerlではTk, Tkxしかやったこと無いけどさ
0681デフォルトの名無しさん
垢版 |
2020/08/18(火) 22:52:59.68ID:MJ+frvDl
>>673
馬鹿?それとも釣り?
0683デフォルトの名無しさん
垢版 |
2020/08/18(火) 23:33:31.65ID:bsH9de+P
やれるというのと、それを目標に人が集まってくるのは別

rubyのrailsとかpythonの機械学習とかみたいに、
GUIの為にperlを覚えたような奴を見たことない
0684532
垢版 |
2020/08/19(水) 01:09:23.66ID:jnnRlfyg
GUIのために言語を選ぶ?
少なくともperlにおいては、そんなことないだろJK
0685デフォルトの名無しさん
垢版 |
2020/08/19(水) 01:48:37.55ID:zoQbwZV2
>>682
そんなに出来のいいものではなかった記憶。
Tk自体も、Perlとのなじみかたも。

CでXを直接使うよりはマシに違いないが。
0686デフォルトの名無しさん
垢版 |
2020/08/19(水) 02:10:38.31ID:hChDa2LJ
>>682
その前にWindowsのGUIの方が普及しただろうが
あれはperlで書かれていたのか?
馬鹿は黙っていればいいのに
0687デフォルトの名無しさん
垢版 |
2020/08/19(水) 03:51:07.71ID:GjYS4Ydc
もはや何の話題だかわからん罠
CGIでPerlを使う話からどうやったらこんなカオスが生まれるのか
0689デフォルトの名無しさん
垢版 |
2020/08/19(水) 07:00:19.93ID:OrygHj4v
Microsoftが卑怯な手段を使ったから普及したのでは?
0690デフォルトの名無しさん
垢版 |
2020/08/19(水) 11:45:52.26ID:zoQbwZV2
Microsoftがどうこうというよりも、ほかがどんくさかっただけやろ。

Windowsは、メッセージループとかコピペとか、最初からけっこうこなれてたような。
どっちも、今ならあんな仕様にはきっとしてなさそうな気はするが、当時としてはなかなか。
0691デフォルトの名無しさん
垢版 |
2020/08/20(木) 22:13:21.51ID:ID9+Ua56
で、GUIと言えばperlと言われたのはいつの時代のどのアプリやOSなのかね
個人的な思い込みではなく
0693デフォルトの名無しさん
垢版 |
2020/08/20(木) 22:29:40.80ID:Eg0HvHSQ
CUI + CGI = GUI
0695デフォルトの名無しさん
垢版 |
2020/08/21(金) 19:46:29.97ID:T2XB7xYy
そういや Perl/tk はその後日本語対応うまくいったのかな?
最初使った時にダメでそれ以来使ってないのだが。
0696デフォルトの名無しさん
垢版 |
2020/08/21(金) 23:08:48.53ID:W/xJ14vU
perlはモジュールの品質が悪すぎたな
どうにでもかけすぎた上にperlのオブジェクト指向きつい感じ
0697デフォルトの名無しさん
垢版 |
2020/08/22(土) 01:02:30.20ID:mNPWH1ii
君はpythonかjavaでもやってなさい
0698デフォルトの名無しさん
垢版 |
2020/08/22(土) 04:05:19.81ID:sSvsNkf5
オブジェクト指向は万能じゃないからな

ライブラリを効率的に使い回す方法をあれこれ模索してたら、
名前空間の衝突を積極的に使う方法に行き着いて、
いろんな型を統一的に扱えるように書けるようになったら、
これ何も知らない人から見たらただのオブジェクトだよなということで出来た
最終的なものに付けた名前であって、最初からオブジェクト指向を目指した訳ではない
そこからオブジェクトなんだったらどうせだからと、面倒くさい宗教に変わっていってしまった

だから、大層なものである必要は全然なくて、メンバーとメソッドが使えるだけで十分便利
0699デフォルトの名無しさん
垢版 |
2020/08/22(土) 18:52:55.61ID:A1+CrrR8
データ(オブジェクト)を中心に処理を考えるみたいなのが発展してオブジェクト指向になったのでは?
どう発展して来たかは今更どうでも良い話だが。
0700デフォルトの名無しさん
垢版 |
2020/08/22(土) 20:13:39.18ID:V7i9nnyT
オブジェクト指向でやるようなアプリはPerlでやるべきではないと思ってる
Perlはバッチ処理一択
0701デフォルトの名無しさん
垢版 |
2020/08/22(土) 20:25:54.19ID:TIWYvQ38
別にOOPで作りたいならPerlでいい。
Perlは文字列を扱うスクリプトで本領を発揮するもんだけどね。

>>770
そもそも動的片付けの言語でOOPはクソだと思ってるわ。
0703デフォルトの名無しさん
垢版 |
2020/08/22(土) 20:57:54.05ID:sSvsNkf5
膨大なライブラリはオブジェクト指向のお陰なのに
小規模なダクトテープ的な処理しかしない人には不要だろうけど
0704デフォルトの名無しさん
垢版 |
2020/08/22(土) 21:21:00.81ID:V7i9nnyT
>>703
ライブラリはその通りだった…

ただメインモジュールを上位でオーバーライドしてどうのこうのとか
そういうのはいい思い出無い
0705デフォルトの名無しさん
垢版 |
2020/08/22(土) 21:22:47.78ID:TIWYvQ38
>>703
Perlでダクトテープ以上のものを作ろうとは思わないから。
ま、しゃーない。
0706デフォルトの名無しさん
垢版 |
2020/08/22(土) 23:16:49.85ID:l6QJWt6E
GUIならPerlとか書いてた人はどうした?
0707デフォルトの名無しさん
垢版 |
2020/08/27(木) 23:16:27.34ID:1q6VaEiG
普段は過疎っているクセに誰かが質問を書き込んだ途端クソどうでもいいヤジ馬(質問には一切答えられない)がわらわらと湧いてくる
0708デフォルトの名無しさん
垢版 |
2020/08/28(金) 11:01:54.67ID:46MGlztH
数日前からLWPでhttpsにつながらなくなったんですが、verify_hostnameを無効にするとつながります
Windows 10、straberry perlなんですが、Windows側の証明書の問題とかあるのでしょうか?
Mozilla::CAなど関係しそうなモジュールは最新にしてみましたが、改善しませんでした
0709デフォルトの名無しさん
垢版 |
2020/08/28(金) 12:46:24.74ID:RBhGMmXK
>>708
復元ポイントに戻る
0710708
垢版 |
2020/08/28(金) 13:20:47.23ID:46MGlztH
>>709
直るかもしれないけど、また何かが更新されてダメになるよね
ほかにないですか?
0711デフォルトの名無しさん
垢版 |
2020/08/28(金) 14:19:31.83ID:hCb6zyPo
証明書関連なんだろうけど、サーバの証明書が悪化してしまったのでは
クライアントとしては無視しないといけない状態に
0712デフォルトの名無しさん
垢版 |
2020/08/28(金) 15:04:08.50ID:CzRmvnjE
Let's Encrypt みたいな無料の証明書を使っているサイトかも。
そういうサイトが多い

証明書の期限切れ
0714708
垢版 |
2020/08/28(金) 18:25:47.79ID:46MGlztH
レスありがとうございます
特定サイトではなく、また、ブラウザでアクセスできてLWPではできないという状況です
その後、セキュリティソフトにESETを使っているのですが、
ESETにブロックされていることが分かりました
Mozilla::CAの証明書が気に入らないのか、ESETの不具合なのか..
どちらかが更新されるのを待ちたいと思います
0716デフォルトの名無しさん
垢版 |
2020/08/28(金) 21:46:39.55ID:hCb6zyPo
別にブラウザ作ってる訳でなし
どのサイトでも、ではなくて単に、複数の特定サイトでしょう
0717708
垢版 |
2020/08/29(土) 10:51:10.89ID:T8S0679o
確かにgoogleやyahooは大丈夫です
twitterはダメですが、こんな所もオレオレ証明書なんですか...
0719デフォルトの名無しさん
垢版 |
2020/09/04(金) 11:45:52.13ID:MZwyBFot
chocolateyでwindowsにstrawberry perlいれてたんだけど
upgradeしたらアンインストールされてインストールでこける
すでにインストール済みだとか、でも実態はアンインストール済み
どうすればいいのか
0721デフォルトの名無しさん
垢版 |
2020/09/04(金) 15:02:41.01ID:TUoLkM+q
木こりが明日のためにと残しておいた大木が次の日になったらどうにも見つからない
来る日も来る日も探すけれどどこだったか思い出せずとうとう10年の月日が過ぎてしまった
そこで木こりは思い直してその辺にあった木を切り倒したそうだ
「はっ!?」木こりはようやく気付いた

a.「木なんてみな同じ」
b.「理想を追い求める自分に酔ってた」
c.「Windows入れ直せ」
0723デフォルトの名無しさん
垢版 |
2020/09/04(金) 15:58:22.63ID:i1o0tLie
Strawberry Perl 5.32.0 入れたんだけどcpanでinstallコマンドを使うとperl.exeがCPU消費したまま戻ってこなくなる現象が起きるね。
0724デフォルトの名無しさん
垢版 |
2020/09/04(金) 16:02:36.23ID:i1o0tLie
今までになくTkをインストールするのが大変だった、5.32.0。
ソース改変してcpanの外でgmake & gmake installせざるを得なかった。
さっさと修正してほしい。
0725デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:10:58.52ID:4QR5o/NS
思い切ってPyQTにしてみろ。こっちのがいいぞ。
0726デフォルトの名無しさん
垢版 |
2020/10/08(木) 23:36:20.91ID:j69EnO8Y
こんな過疎ったクソスレだけど、たまにやって来る質問者をガヤが追い出そうと必死になるんだよな
頭の中どうなってんだろ
0727デフォルトの名無しさん
垢版 |
2020/10/11(日) 18:23:11.86ID:uVmgdJtU
すいません、あるサイトの記述で下みたいな構文なんだけど
$aiueo = [AAA =>123,BBB=>345];
変数は変えてあります
ハッシュのリファレンスとは違うようなんだけど何をやってるかわかりますか?
それと、この構文で123をprintで表示してみたいのですがどうやればいいのでしょうか
0732デフォルトの名無しさん
垢版 |
2020/10/11(日) 21:08:33.51ID:OOWRCRR6
配列() のリファレンスが []
ハッシュ() のリファレンスが {}

というややこしい部分に引っかかって間違って書いてるだけと予想
0734デフォルトの名無しさん
垢版 |
2020/10/20(火) 10:47:47.83ID:D4H7EOaJ
教えて下さい。Windows10 で、ActivePerl 5.20.3 (Win32-x86)
を使っています。「use blib;」の一行だけのスクリプトを実行すると、
次のようなエラーが出ます。

Cannot find blib even in C:\
BEGIN failed--compilation aborted at C:\bin\blibtest.pl line 1.

しかし、C:\Perl\lib には、blib.pmというファイルがあり、
@INCには、C:\Perl\lib が含まれています。
blib を使うためには、どのようにすればよろしいでしょうか?
0736デフォルトの名無しさん
垢版 |
2020/10/20(火) 14:02:34.19ID:D4H7EOaJ
>>735
ありがとうございました。
しかし、環境変数PERL5LIBを使っても、同じでした。

Cannot find blib even in C:\
BEGIN failed--compilation aborted at C:\bin\blibtest.pl line 1.

C:\doc>set perl5lib
PERL5LIB=C:\Perl\lib
0737デフォルトの名無しさん
垢版 |
2020/10/20(火) 14:40:16.81ID:D4H7EOaJ
>>734ですが、
そもそも何をしたかったのかということも書いておきます。
Windows の名前付きパイプを使おうとしており、このページ
https://metacpan.org/release/JDB/Win32-Pipe-0.025
にあるサンプルコード(test.bat、Client.pl、Server.pl)
を実行すると、Cannot find blib even in C:\ とのエラーが
発生しました。

そこで、問題を単純化して、>>734を書きました。
0739デフォルトの名無しさん
垢版 |
2020/10/20(火) 18:08:46.77ID:NolEEcIo
blib.pmはカレントまたは指定したパスから数レベル上まででblib/libとblib/arch両ディレクトリが存在したら@INCの先頭に追加、無ければエラーで終了するだけのモジュール
該当ディレクトリが無かったからC:\にたどり着いたというだけ

Active PerlはWin32::Pipeバンドルされてたはずなのでblib不要
0741デフォルトの名無しさん
垢版 |
2020/10/20(火) 21:44:35.79ID:tFiyzFdf
blib.pmはちゃんとuseされていて、blib.pmの動作としてエラー終了したということですか
0742デフォルトの名無しさん
垢版 |
2020/10/20(火) 22:27:40.87ID:sh3hHW9L
die "Cannot find blib even in $dir\n" って blib.pm のソースに思いっきり書いてあるがな
0744デフォルトの名無しさん
垢版 |
2020/10/25(日) 10:29:53.41ID:eR26jTX4
ライブラリが読めてないのか、読めてるけどエラーになるのかの切り分けが必要だったな
0746デフォルトの名無しさん
垢版 |
2020/10/25(日) 11:49:26.86ID:/f/Br1ml
あ、でもやってみたら@INCにない場合とメッセージ違うんだな。
とはいえ知らないと分からないよね。
0748デフォルトの名無しさん
垢版 |
2020/10/27(火) 12:24:00.33ID:FNX2BsFN
>>747
ブラウザを遠隔操作することだろうね。
昔、Win32::IEAutomation 使っていたけど、
今はどんなモジュールがいいのかよく解らない。
0749デフォルトの名無しさん
垢版 |
2020/10/27(火) 22:34:11.97ID:wfYFUdXE
>>747
Linux とかなら wget または curl コマンド。
Windows は知らないけど探せば同じコマンドあるんじゃないかな。
それとかPowerShellだと何かないか?ありそうだよな。俺知らないけど。
0750デフォルトの名無しさん
垢版 |
2020/10/27(火) 23:05:01.31ID:K6PuV+RV
難しいのう
firefoxから証明書をエクスポートして食わせてwgetしてもまだ成功しない
0751デフォルトの名無しさん
垢版 |
2020/10/27(火) 23:53:21.84ID:a7WAgl/q
Ruby では、open-uri でHTML を取得して、nokogiri でスクレイピングできる。
または、begin〜end 内に書いた、curl コマンドでも取得できる

他には、wget や、VSCode の拡張機能、REST Client とか

require 'open-uri'
require 'nokogiri'

=begin
html = `curl https://example.com/`
doc = Nokogiri::HTML( html )
=end

url = "https://example.com/";
doc = Nokogiri::HTML( open( url ) )

elements = doc.css( "h1" )
puts elements.first.content #=> Example Domain
0752751
垢版 |
2020/10/28(水) 00:05:57.96ID:H1Ljm7vl
Windows 10 には、curl.exe も入っている。
これは、PowerShell のcurl エイリアスとは異なる

コマンドプロンプトで、
where curl
C:\Windows\System32\curl.exe
0755532
垢版 |
2020/10/28(水) 08:36:56.65ID:TnU9NEZC
LWP::Protocol::https
がインストールされていれば

$url = "https://…";
require LWP::UserAgent; # with LWP::Protocol::https
$ua = LWP::UserAgent->new;
#$ua->agent('Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko');
$s = LWP::UserAgent->new->get($url)->content;
0758デフォルトの名無しさん
垢版 |
2020/10/28(水) 18:43:51.13ID:14aXOJ7K
そこはマジで面倒だなと思うね
pythonのrequestsモジュールとか何も考えずにできるし
0760デフォルトの名無しさん
垢版 |
2020/10/28(水) 19:35:38.14ID:ITw4VFJA
今ならコアモジュールのHTTP::Tinyで十分でしょう
IO::Socket::SSLかNet::SSLeay をインストールする必要がありますが
pythonだってrequests
0762751
垢版 |
2020/10/28(水) 22:46:17.13ID:H1Ljm7vl
Ruby なんて、よく使うものは、標準で入っている

Battery Included・電池付き言語
0763デフォルトの名無しさん
垢版 |
2020/10/28(水) 22:58:53.02ID:A4Y862UG
>>762
Rubyとかプログラム言語よりも「読点(、)」の使い方を学んだほうがいい
自分の書き込みを声に出して読んでみるとわかるよ
0764デフォルトの名無しさん
垢版 |
2020/10/28(水) 23:18:21.09ID:inVpsElI
読点の使い方に決まったルールは無いんだよな
なんとなく集合的に多数派の使い方はあるけど、
それを気にしてる人しか身につかないし、
気にしてない人はどういう使われ方をしてても何も思わない

多数派の使い方から外れると何か困るかというと、特に困らない
気にしてる人だけなんか変と思うだけで、意思疎通に支障は無い
気にした方が負けという悲しい現状がある
0765532
垢版 |
2020/10/29(木) 00:33:18.30ID:2QXtbAjf
そもそも言葉がそういうものだろ
だからかまわないというのは極論
というかそういう話もrubyも該当スレでやってくれ
0766デフォルトの名無しさん
垢版 |
2020/10/29(木) 07:05:28.87ID:vmIccHQe
読点は、基本的には使わない
意図的に区切りを入れたい箇所で使う
区切りを入れる目的がいろいろあって、それが理由で明文化できない

一旦間を置くことで強調することができる
主節と従属節を明確にできる
誤読を防ぐ
読みやすくなる、等々
より良い文章を心がけている人しか読点はそもそも必要ない

自分は、文節の区切りが漢字で連続しているあるいはひらがなで連続している時に、
読みやすさの為に入れることがよくある
0768デフォルトの名無しさん
垢版 |
2020/10/29(木) 12:59:56.99ID:DfWTURJR
普段文ではあんまり使わないかな 空白を使うようになった
てか。もあんまり使わない。改行するようになった。
これ最近の傾向ね。
ちゃんとした文章の時は学校で習ったようにちゃんとするよ。
たまに見かける、多用の文章はバカっぽくて好きになれない。
0769デフォルトの名無しさん
垢版 |
2020/10/29(木) 16:41:07.61ID:6ZxgJt1a
お前ら得意のうんちく・知ったかで生き生きしてるな
どうでもいい話題になると湧いてくるのな
0770デフォルトの名無しさん
垢版 |
2020/10/29(木) 23:07:14.55ID:XA006Kuj
Perl好きの住人がいるんだよ。
なんかネタがあると湧いてくるが自分からは投入しない。
というか今更ないんだよな。
0771デフォルトの名無しさん
垢版 |
2020/10/30(金) 08:36:37.09ID:yt6Q5TzG
LWP::Protocol::https はインストールしなくても入ってるみたいだけど、
やっぱりアクセスできない
0774デフォルトの名無しさん
垢版 |
2020/10/30(金) 14:45:50.35ID:yt6Q5TzG
入ってなかったら入ってないというエラーになるんじゃないのかな
プロトコルのエラーになるんだよな
0775デフォルトの名無しさん
垢版 |
2020/10/30(金) 16:51:58.64ID:yPjXBzu5
>>772
Perl6できたてのころにちょっと試したけど、スクリプト言語的な使いやすさがなくなってたからなあ。
きっと普及せんやろな、と思った。
0776デフォルトの名無しさん
垢版 |
2020/10/30(金) 17:12:05.20ID:X2Arn8L3
Strawberry Perl 5.32 向けのTk、相変わらずビルドエラーを手動修正しないとインストールできない。
バンドルされているコンパイル環境の問題かもしれないけど、そのままってのはちょっと。
Tkって重要じゃね?どうよ?
0778デフォルトの名無しさん
垢版 |
2020/10/30(金) 19:26:17.53ID:yPjXBzu5
>>777
いや、大きな追加機能自体はおもしろそうなんだよ?
Grammarとか。

また、識別子にハイフンが使えるとか、トークンの区切りが原則はスペースとか、文法も興味深いかわりに、ほかと違いすぎて。。。
0780デフォルトの名無しさん
垢版 |
2020/10/30(金) 20:46:03.54ID:J8RJfKX8
字句解析と構文解析は、表を使ったアルゴリズム自体は同一なので、一つの表にまとめられる。
しかし、分離できる場所で分離した場合に比べて表が大きくなるので、あまりお得じゃないと思う。
もちろん数ギガバイトのメモリーを積む現代のコンピュータでは、100メガバイトの表は決して非現実的ではないけれども。
ドラゴンブックが書かれた時代には、分けなければ実装できない程度の大きさだったと思う。
0781デフォルトの名無しさん
垢版 |
2020/10/30(金) 21:02:37.09ID:yPjXBzu5
>>779
いやー、ちゃんと使ってみたかった。
難しいならそれを体感したかったな。

lex/yaccのめんどくささは知ってるけど、あれよりはマシやろ。w
C#のSpracheみたいなもんじゃないの?
0783デフォルトの名無しさん
垢版 |
2020/10/30(金) 22:09:51.09ID:Nsw5dj/j
>>781
アルゴリズムが違うからなんとも言えんが
バックトラックしないのでカーソルの位置を常に意識しなきゃいけないのがすごくキツい
あこれマッチしないの?ってことが多々あって慣れなんだろうがキツい
デバッグも大変
0784532
垢版 |
2020/10/30(金) 22:24:35.54ID:QEBk4Q6j
Perl5のParse::RecDescent.を使えれば
Perl6のGrammarも大丈夫だと思う

多分
0786デフォルトの名無しさん
垢版 |
2020/11/02(月) 15:05:38.99ID:iEycKQwb
Raku の Grammar というのは、「クラス定義+演算子のオーバーロード」
と比較して、何が優れているのだろうか?
0788デフォルトの名無しさん
垢版 |
2020/11/13(金) 10:25:46.33ID:ZCyQI0Un
処理済みかとか、除外対象か、みたいなチェック用に
%except = (aaa => 1, bbb => 1);
みたいなテーブルを作っておいて、
if (!$except{$x}) { ... }
みたいなことをする

で、=> 1 の部分は何でもいい訳で、これが無駄に見える
@except = (aaa, bbb);
の方が自然だけど、判定部分が複雑になる

なんとか判定をシンプルに書けないものか
0790デフォルトの名無しさん
垢版 |
2020/11/13(金) 10:53:46.81ID:IuUtHHuD
でもハッシュの方がよくないかなあ。
%except = map { $_, 1 } qw(aaa bbb ...);
とか
undef $except{$_} for qw(aaa bbb ...);
で判定はexists
とか
0791デフォルトの名無しさん
垢版 |
2020/11/13(金) 11:34:25.97ID:4qY0TlDt
>>788
無駄に見えるのは気のせいなので、気にするな。
何が気に入らないのか、意味不明なレベル。

せいぜいが判定をexists()に変えるくらいか。
でも、処理の意図は明確になっても、記述量は増えてまう。
結局、もとのほうがいい。
0793デフォルトの名無しさん
垢版 |
2020/11/13(金) 13:04:35.51ID:f6yctSrL
ここの人ってpythonもできるの?
pythonを最近覚えたんだけど、pythonで書き始めてからperlに戻る気がしないw
0794デフォルトの名無しさん
垢版 |
2020/11/13(金) 13:11:47.54ID:ZCyQI0Un
常にuse strictで書いてるような人はpythonの方がいいかも

危険を承知でとにかく楽に、という書き方がpythonはできない
0795デフォルトの名無しさん
垢版 |
2020/11/13(金) 17:55:04.27ID:IGEbWGrX
>>793
pythonも書いてるけど感覚としてはそこまで差はない
pythonの方が厳格ですぐエラー吐いてくれるから
それを良しとするか
あとはライブラリの質が段違い
0796デフォルトの名無しさん
垢版 |
2020/11/17(火) 17:45:06.40ID:jAzXruH+
デフォルト以外のブラウザを開くことはできませんか?
デフォはこれでいけてます
use Win32::FileOp qw(ShellExecute);
ShellExecute($url);.
0797デフォルトの名無しさん
垢版 |
2020/11/17(火) 23:05:44.09ID:cjOqkcds
例えば、デフォが他のブラウザで、あるurlをFirefoxPortableで開きたいとき、
次のようなコマンドを実行させているが、これをPerlでやればいいんじゃないの?

"U:/FirefoxPortable/FirefoxPortable.exe" https://foo/bar/
0798デフォルトの名無しさん
垢版 |
2020/11/18(水) 00:40:53.82ID:T6Vtm1bs
ありがとう
`C:/Program Files (x86)/Google/Chrome/Application/chrome.exe`
とりあえずここまででchrome開くことはできたのですがURLの指定はできないでしょうか?
0801デフォルトの名無しさん
垢版 |
2020/11/18(水) 08:31:15.08ID:XTvONPVJ
>>800
wperl.exeからsystem()を呼び出すと新しいコンソールウィンドウが開くので要注意。
0803デフォルトの名無しさん
垢版 |
2020/11/28(土) 18:31:31.18ID:1bDz9VeK
「数で得る」というのがよく解らないが、timelocal()とlocaltime()を使えば、
多分、やりたいことができると思う。
0804デフォルトの名無しさん
垢版 |
2020/12/03(木) 17:27:36.92ID:PrWVOzOn
これから仕事ではじめてperlを使うんだけど、メッセージやメール出力などにマルチ言語対応が入ってる
resourceに言語ファイルをいれる形で実現したいけど、どのようにするのがいいか教えて下さい

複数のスクリプトを開発して連係させる予定
0805デフォルトの名無しさん
垢版 |
2020/12/05(土) 13:44:54.28ID:DP7JjxAq
ヒアドキュメントの中で数式を使うやり方は?
@{[数式]}
のようにやってもエラーで動かなかった
0806デフォルトの名無しさん
垢版 |
2020/12/05(土) 15:34:53.50ID:3OUqO/Qz
>>802
Ruby on Rails なら、時刻計算用のライブラリがある

require 'active_support/time'

p Date.new( 2020, 2, 28 ).advance( days: 2 )

出力。うるう年
Sun, 01 Mar 2020
0807デフォルトの名無しさん
垢版 |
2020/12/05(土) 15:43:47.69ID:+/FrBp4K
そんな感じの気楽で使いたい

$date = date->new('2020-12-05');
$date += 100;
($y, $m, $d) = ($date->year, $date->month, $date->day);

こんなん
0809806
垢版 |
2020/12/05(土) 18:18:59.36ID:3OUqO/Qz
「perl 時刻 計算」で検索すれば?

日付・時刻を扱う標準モジュール、Time::Piece が標準で添付されています。
もっと便利なモジュールを、誰かが作っているかも
0810デフォルトの名無しさん
垢版 |
2020/12/05(土) 18:31:57.30ID:+/FrBp4K
localtimeからスタートする時はそれが便利
何か基準の日付から計算しようとすると面倒になる
0812デフォルトの名無しさん
垢版 |
2020/12/05(土) 23:54:20.43ID:DP7JjxAq
>>811
print <<"eos";
@{[print "aaawww";]}
eos

これでエラーだった
0813デフォルトの名無しさん
垢版 |
2020/12/06(日) 00:14:01.05ID:GZ1arJtc
>>812
だからエラーの文面をはれっつーの。

でも、わかった。
「[]」の内側に書けるのは、式のリスト。
最後に「;」を書くのは、「式」でなく「文」というか。

しかし、それだとうまくいっても「aaawww1」と表示される気がするが、どうなの?w
0814532
垢版 |
2020/12/06(日) 00:15:36.74ID:1Uj+ZrCS
print <<"eos";
@{[print "aaawww"]}
eos

$ perl aaawww.pl
aaawww1


;を省くと動くが、「1」とか余計なものがつくな
0815デフォルトの名無しさん
垢版 |
2020/12/06(日) 00:43:41.05ID:Znd8Qdfl
>>813
CGI 実行エラー syntax error at test.cgi line 10, near ""aaawww";"
Execution of test.cgi aborted due to compilation errors.
0816デフォルトの名無しさん
垢版 |
2020/12/06(日) 01:06:20.00ID:rqNKNacS
単なる構文エラー
無名リストの中に裸のセミコロンがあったらまずいでしょ
["A", "B", 3, ";"] OK
["A", "B", 3, ;] エラー

余計な1じゃなくてprint関数の返り値
printが成功したので真(1)を返して無名リストの要素になった
printで"aaawww"が表示された後デリファレンスされて展開された1がヒアドキュメントで表示される
0818デフォルトの名無しさん
垢版 |
2020/12/06(日) 01:19:08.97ID:d/9HsImJ
>>802
今更だけど日付をエポック秒で表して日数×24*60*60を足すんじゃだめ?

車輪の再発明というかただの製作を承知で、自分で日付変換の関数を一通り作ったらそれで十分だった
便利そうなライブラリを探そうとしたこともあるけど、オブジェクト指向的なやつだと結局その
オブジェクトを介した変換が頻出することになってスラスラ書けないなあと思ったのです。

もし今後UTCとかJSTとか出てきたときはそのときまた考える。
0819デフォルトの名無しさん
垢版 |
2020/12/06(日) 02:06:04.21ID:fHRDTQ7E
PerlのYAML関連のモジュールが全部重くて厳しい
高速なYAMLモジュールはないのか?
0821デフォルトの名無しさん
垢版 |
2020/12/06(日) 11:42:16.72ID:BlX3SIQO
>>803 だが、>>802 の質問は>>803 で終わったと思ったのだが、不親切だった?
例えば2019年12月1日から365日後の日付は、次のようにすれば得られる。

use Time::Local;
$year=2019;$mon=12;$mday=1;$hours=12;$min=0;$sec=0;
$intvl=365;
$basetime = timelocal($sec, $min, $hours, $mday, $mon-1, $year-1900);
$basetime += $intvl*24*60*60;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime($basetime);
$mon+=1;$year+=1900;
print STDERR "$year.$mon.$mday\n";
0824デフォルトの名無しさん
垢版 |
2020/12/07(月) 09:43:24.77ID:UAiCPmDo
Time::Piece はよくできてて、何かのログとかに現在時刻を書き出す、
とかの用途には十分に使える

でも、時刻計算や日数計算はあまり考慮されていない
現在時刻からの計算はできても、任意の時刻からだと弱い
0825デフォルトの名無しさん
垢版 |
2020/12/07(月) 14:03:32.45ID:tC78i6pr
>>807

use Time::Piece;
use Time::Seconds;

my $day = Time::Piece->strptime('2020-12-05', '%Y-%m-%d');

$day += ONE_DAY * 100;

print $day->date, "\n";

print $day->year, "\n";
print $day->mon, "\n";
print $day->mday, "\n";
0827デフォルトの名無しさん
垢版 |
2020/12/07(月) 15:40:13.93ID:15jj6qfl
use POSIX; を宣言してCの標準関数に似た時刻処理機能を使うのが普通じゃないの?
Cの時刻処理サンプルコードを円滑にPerlに移植できるよ。
0829532
垢版 |
2020/12/07(月) 21:57:48.14ID:WG5ppFXF
Time::Pieceの弱点は
strptime()で作ったインスタンスのtimeゾーンをいじれないとこかな?
後1つなんか弱手あった気がするが忘れた
0830デフォルトの名無しさん
垢版 |
2020/12/07(月) 22:38:30.88ID:UAiCPmDo
strptimeはpythonでもrubyでも同じだから、もう慣れなんだろうな
'YYYY-MM-DD' とかではあかんかったのか
0831デフォルトの名無しさん
垢版 |
2020/12/08(火) 04:35:26.34ID:65P2yCaW
>>821
timeLocal()の年は1900引かない方がいいよ。これちょっとCのライブラリとは違うんだよ。詳しくはドキュメント読んで。
0832デフォルトの名無しさん
垢版 |
2020/12/08(火) 04:36:34.48ID:65P2yCaW
あ。タイプミス。timelocal()ね。
0833デフォルトの名無しさん
垢版 |
2020/12/08(火) 23:53:37.62ID:VS4VHEi1
すみません、ソートで教えて欲しいんですが下記のようにみたいな枝番号が付いてる文字列をハッシュのキーとして
ハイフン前の数値でソートした後にハイフン後の数値でソートしたいのですが
普通に$a <=> $bだとハイフンの後の値がバラバラになって上手くいきません
キーを作る際に別々に作ってループ増やすくらいしか自分には解決方法が無いのですが、スマートに出来る方法は無いのでしょうか?
1-1
1-2
2-1
2-2
3-1
0834デフォルトの名無しさん
垢版 |
2020/12/09(水) 00:31:36.73ID:LWKBPFtb
>>833
シュワルツ変換で検索!

たとえば :
mapでソート用の値として、前の数字×10000+後ろの数字の値をつくって、それともとの値のペアにする。
それを<=>でソートする。
mapで、ソート結果からもとのデータ部分を取り出す。
0835デフォルトの名無しさん
垢版 |
2020/12/09(水) 00:39:46.90ID:LWKBPFtb
要は、map{...} sort{...} map{...}となる。
変換のためのループが2回入る(map)が、記述としてはあっさりなので、特殊なソートをしたいときにはよく使われる有名な方法。

伝わるかな?w
0837デフォルトの名無しさん
垢版 |
2020/12/09(水) 09:35:02.27ID:sn/SI4a+
>>833
こんな感じかな。デバッグはしていないが。
@newlist = sort compare @oldlist;

sub compare{
my ($ap, $bp) = @_;

($ap1, $ap2) = $ap=~/([0-9]+)\-([0-9]+)/;
($bp1, $bp2) = $bp=~/([0-9]+)\-([0-9]+)/;
return 1 if $ap1 > $bp1
return -1 if $ap1 < $bp1
# $ap1 == $bp1;
return 1 if $ap2 > $bp2;
return -1;
}
0838デフォルトの名無しさん
垢版 |
2020/12/09(水) 10:27:05.71ID:LWKBPFtb
>>836,>>837
それだと、要素の比較のたびに、値の変換処理が行われる。
比較は何度も行われるため、変換処理が軽くない場合、ソート全体としてかなり重くなりうる。
すくなくとも「スマート」とは言えない。

そこで、変換結果をキャッシュするような形になるのがシュワルツ変換。

知らんならググれ。
0839デフォルトの名無しさん
垢版 |
2020/12/09(水) 10:46:35.52ID:zREBomTd
sort { s1($a) <=> s1($b) } keys %x;

sub s1 {
shift =~ /(¥d+)-(¥d+)/ && 100*$1+$2
}
sortならこんなかんじ
0840デフォルトの名無しさん
垢版 |
2020/12/09(水) 10:47:56.70ID:UMU4oc+t
順番が変わるだけで処理量は変わらんでしょう
どっちにしろ重い

次にソートする時はソート対象が変わっているんだから、キャッシュできない

有効な局面もあるんだろうけど、今回に関してはトリッキーなだけでメリットがない
0841デフォルトの名無しさん
垢版 |
2020/12/09(水) 10:51:05.82ID:UMU4oc+t
次のソートじゃなくて、1回のソート内部の複数の比較に対してか
あー、確かに速くなりそうな気がする
処理系が気を利かせて変わらない気もする
0842デフォルトの名無しさん
垢版 |
2020/12/09(水) 11:29:48.25ID:LWKBPFtb
>>841
ソートの内部処理が想像できんのか?
もとの並び方にはよるが、ふつうは大きく異なる。
「処理系」とやらが気を利かせられる範疇ではない。

比較処理にsayでもいれて試してみろっつーんだよ。
0843デフォルトの名無しさん
垢版 |
2020/12/09(水) 12:58:19.84ID:UMU4oc+t
内部の話だからsayでは判らんだろ

関数で評価しないといけないと判っていて、動的に処理する必要も無いんだから、
評価済みのテーブルを内部に持たせようというのは自然な発想
0845デフォルトの名無しさん
垢版 |
2020/12/09(水) 13:44:43.94ID:UMU4oc+t
判ってないのかな

処理速度に配慮した処理系があっても不思議ではないという話
手元で試して遅かったとしても、全ての処理系に対する証明にはならない
0848デフォルトの名無しさん
垢版 |
2020/12/09(水) 15:17:55.01ID:UMU4oc+t
そもそも重いかどうかが疑問で、どっちでやっても一瞬で終わるのが普通
それなら読みやすい方が優れている
重くて困ってから対策を考えればいい
0849デフォルトの名無しさん
垢版 |
2020/12/09(水) 16:44:07.55ID:qaSCdqDS
map {
$_->[0];
} sort {
$a->[1] <=> $b->[1] || $a->[2] <=> $b->[2];
} map {
[$_, /(\d+)/g ];
}

読みにくい…かなあ?
0851デフォルトの名無しさん
垢版 |
2020/12/09(水) 18:15:36.35ID:UMU4oc+t
別に短く書かなくていいんだよ

@r = sort s2 @a;

sub s1 {
  my $str = shift;
  $str =~ /(\d+)\-(\d+)/;
  return $1 * 100 + $2;
}

sub s2 {
  return s1($a) <=> s1($b);
}
0853デフォルトの名無しさん
垢版 |
2020/12/09(水) 19:43:12.41ID:LWKBPFtb
>>848
おまえ、ハードな処理を実装したことがないやろ?w

慣れたPerl使いはわざわざ>>851みたいなコードは書かない。
遅いし、くどくて逆に読みにくいからな。
0854デフォルトの名無しさん
垢版 |
2020/12/09(水) 19:45:15.15ID:LWKBPFtb
>>850
C#でも、タプルが使えるようになったので、似たようなコードは書く。
LINQなぶんだけPerlより読みやすいけど。
0855デフォルトの名無しさん
垢版 |
2020/12/09(水) 22:17:09.12ID:rsuX7ND7
ハッシュテーブルにs1($val)の戻り値を保存して、そのハッシュテーブルを使って比較関数を呼び出すとかするのが普通でしょ。
0856849
垢版 |
2020/12/10(木) 06:03:00.77ID:+FxPMgzN
読みやすい優れたコードが >>851 か。
自分のコードを出してくれた点は評価するが
$1 * 100 + $2
って何?
0859デフォルトの名無しさん
垢版 |
2020/12/11(金) 03:24:48.11ID:lklp228q
考え方は同じだけど最初からソート用の値をデータに持たせてみる。
my %x = (
'3-1' => ['e', 301],
'1-2' => ['b', 102],
.... ,
);

sort { $x{$a}[1] <=> $x{$b}[1] } keys %x;
0860デフォルトの名無しさん
垢版 |
2020/12/11(金) 03:42:00.36ID:Hz2bdcAQ
複数キーでのソートに帰着させるべきなんだろうな
1-1-1 も許容する、とかになった瞬間に破綻する
0861デフォルトの名無しさん
垢版 |
2020/12/11(金) 04:01:52.35ID:Hz2bdcAQ
sub s1 {
my @a = split /\-/, $a;
my @b = split /\-/, $b;
my $dim = @a > @b ? @a : @b;
for my $i (0 .. $dim) {
my $cmp = $a[$i] <=> $b[$i];
return $cmp if $cmp;
}
return 0;
}
0862856
垢版 |
2020/12/11(金) 06:10:31.03ID:LwDR4/oY
>> 833 には数値の値域については何も書かれてないんだから
勝手に想定しない方がいいと想うよ。
どうしても比較を簡略化したいなら pack 関数で数値を全部
ビッグエンディアンで並べればいいんじゃないかな。
0863デフォルトの名無しさん
垢版 |
2020/12/11(金) 10:41:01.46ID:vQm1aiEb
>>860
最初から想定されてるのでなければ、ひどい仕様変更なんだから、実装変更もやむなしやろ。
数字じゃなくてアルファベットにします、と言われただけでパーやし。w
0864デフォルトの名無しさん
垢版 |
2020/12/11(金) 10:50:54.59ID:vQm1aiEb
>>862
勝手に想定するのもあたりまえ。
じゃないと、なんにも例示できなくなるで?

値域がどうこうなんか、自分でなんとでもすればいいだけ。
本題のソートには関係ない。
0865デフォルトの名無しさん
垢版 |
2020/12/11(金) 11:20:18.13ID:Hz2bdcAQ
1-1があるなら1-1-1もあると予測するのは自然な拡張
1-1-1-... に無限に対応できるように作っておいて、
その特殊ケースとして要件を満たす、で十分

アルファベットにも対応するのは次元が違う
0866デフォルトの名無しさん
垢版 |
2020/12/11(金) 19:40:49.33ID:V1LdBVWq
>>864
こういうひとがコーディングすると
バッブァオーバーランとか起こしてセキュリティに穴を開けるんだな
0868デフォルトの名無しさん
垢版 |
2020/12/11(金) 21:01:49.19ID:jm3zE7RU
普段は過疎ってるのに少し書き込みがあるとクソ雑魚が湧いてきてグズグズ文句たれる
頭の中どうなってんだろうな
0870デフォルトの名無しさん
垢版 |
2020/12/11(金) 22:41:46.66ID:pFqzegRi
>>837 だが、実は、このコードは、オレが実際に、数字とかアルファベットとかが
複雑に絡んだ文字列を、ある規則に従ってソートするために作ったものを
流用したんだ。だから、応用範囲が広いという点では、これがいいと思うけどな。
0873デフォルトの名無しさん
垢版 |
2020/12/11(金) 23:38:00.26ID:Hz2bdcAQ
どう見ても章のタイトルとかそんなんなので、1000も無いよ
高速化の工夫は遅くて困ってから
0874532
垢版 |
2020/12/12(土) 00:28:14.42ID:tTwN9OuS
>>833
perlのsort()アルゴリズムは5,8以降マージソートになってsort結果は安定なアルゴリズムなので
手短にコードを書くなら右の数字でsortしてから左の数字でsortすれば所望の結果が得られる。以下サンプル実装

use List::Util 'shuffle';
%h = map{$_ => $i++} shuffle qw{1-1 1-2 1-3 2-1 2-2 2-3 3-1 3-2 3-3};
use feature qw{say signatures}; no warnings experimental;

@k1 = keys %h;
say "@k1";
sub f($s) { [$s =~ /(\d+)/g, $s]};
@k2 = map{$$_[2]} sort{$a->[0] <=> $b->[0]} sort{$a->[1] <=> $b->[1]} map{f $_} @k1;
say "@k2";


実行結果
~ $ perl 64_833_n-n_sort_1.pl
1-1 2-3 3-3 1-2 3-1 2-2 2-1 1-3 3-2
1-1 1-2 1-3 2-1 2-2 2-3 3-1 3-2 3-3

言語処理系内部のsort()関数のアルゴリズムに依存しない書き方がしたいなら
左と右の数値で二段階のソートをするか、右の数字と左の数値で順位に一貫性のあるキーを作って
一段階のソートで済ませる方法もあると思う。

そういったサンプル実装を見たいのであれば、時間があればくけれども…
0875532
垢版 |
2020/12/12(土) 00:42:28.87ID:tTwN9OuS
つか、実は Tie::IxHash を使ってhashに登録したデータの順番を維持して取り出せれば
いいだけの話だったりしてな。しらんけど
0877532
垢版 |
2020/12/12(土) 00:48:12.17ID:tTwN9OuS
>>849
おっとここに十分な解答があったわw
0881862
垢版 |
2020/12/12(土) 09:07:56.06ID:K38oRjDr
pack に誰も食いついてこないのはちょっと寂しいな。
正しくやれば C でさえ 1 回の memcmp で比較が済むのだが。
ましてや、Perl の pack/unpack は Perl4 の時代からある超便利関数なのだが。
まあ、「ひょっとして比較をシンプルにしたいのかな?」と思ったから書いただけだし
今回のニーズには合ってても万能というわけではないし
自分が良いと思う方法でやればいいと思うよ。
0882デフォルトの名無しさん
垢版 |
2020/12/12(土) 09:26:02.24ID:kEr/Zqiv
数1つあたりのbit数が決められないがな
何とかしてmap使いたいから無理筋言ってるだけとしか
0883532
垢版 |
2020/12/12(土) 10:42:34.69ID:+ekv//0b
>>833 >>874に書いた左の数字と右の数値両方で順位に一貫性のあるキーを作って一回でsortするサンプル
数値は4桁以下であることを仮定してます。

use List::Util 'shuffle';
%h = map{$_ => $i++} shuffle qw{1-1 1-2 1-3 2-1 2-2 2-3 3-1 3-2 3-3};

@k1 = keys %h;
print "@k1\n";

@kk = map{[sprintf("%4d%4d", /(\d+)/g), $_]} @k1;
@k2 = map{$$_[1]} sort{$$a[0] cmp $$b[0]} @kk;

print "@k2\n";
0884532
垢版 |
2020/12/12(土) 10:47:43.50ID:+ekv//0b
こうやって幾つかコード書いてみて…>>849かTie::IxHashで十分な気がしたわw
0885デフォルトの名無しさん
垢版 |
2020/12/12(土) 13:20:14.94ID:4UtPcEnB
>>881
慣れたヤツには最適解過ぎ、慣れてないヤツには意義がわからん、ということで、そんなに食いつきようがないやろ。w
0886デフォルトの名無しさん
垢版 |
2020/12/16(水) 23:33:00.22ID:qMOR0fCG
>>833
もしそれが桁数固定で、例えばその例のように一桁の数、ハイフン、一桁の数という文字列ならば、何も考えずにそのまま文字列として比較して sort すればいい。つまりただ sort するだけ。
0887デフォルトの名無しさん
垢版 |
2020/12/17(木) 05:05:50.95ID:fz9fvgi4
そんなもんは9で終わる訳がなくて10も100もある筈、と自然に拡張して考える
それと同様に、枝番号ならサブサブセクション以降もある筈、という拡張は
自然なのに、そっちには思い至らないんだよな
0890デフォルトの名無しさん
垢版 |
2020/12/18(金) 08:53:35.39ID:lJHaaS7Y
今だけはいいけどすぐに駄目になりそうな設計を、
裏技見つけたみたいにやりたがる奴がいるんだよな
ユーザは予想を超えた無茶をしてくるものなのに
0893849
垢版 |
2020/12/18(金) 16:30:11.78ID:1Xc4Ax1A
sub Schwalts {
@tmp = @_;
@tmp = map { [$_, /(\d+)/g ] } @tmp;
@tmp = sort { $a->[1] <=> $b->[1] || $a->[2] <=> $b->[2] } @tmp;
( map { $_->[0] } @tmp);
}

を短く書いたのがシュワルツ変換だよ
くらいの説明はした方がいいのかな。
0895デフォルトの名無しさん
垢版 |
2020/12/22(火) 10:15:20.24ID:YhckWNJa
最近raku触ってるけど面白すぎるわこれ、識別子をパース?して組み合わせるの楽しい
もうこれ半分lispだろ
0896デフォルトの名無しさん
垢版 |
2020/12/22(火) 12:14:37.88ID:/kVuwMjM
演算子の前後に空白が必須なの、なんかイヤじゃない?
ツメツメで書きたいのに。

Perl6のころだけど、オレが降りた理由のひとつ。
0897デフォルトの名無しさん
垢版 |
2020/12/22(火) 16:09:49.34ID:Rxnt3reZ
>>895
面白いんだけどね
他の言語では無いような機能のオンパレード
ちょっと先を行き過ぎてる感が強すぎるかなあ
0898デフォルトの名無しさん
垢版 |
2020/12/22(火) 16:21:28.35ID:Mi4b/BA1
言語なんて、他の言語のいいとこ取りで進化していくからな
常に便利になった部分と実験的な部分がある
0899デフォルトの名無しさん
垢版 |
2020/12/27(日) 18:10:18.92ID:pJIjrBUp
ローカルで一番最初にperlの呼び出しの部分は#!c:/Perl/bin/perl.exeって書くけど
サーバーに上げるときは毎回#!/user/local/perlというように書き直すのがめんどうだけど
#!/user/local.perlのまんまでもローカルで動かす方法ありますか?
0900デフォルトの名無しさん
垢版 |
2020/12/27(日) 19:39:12.76ID:CEWAcbKQ
あれ?
/usr/local/perlのままでもいけるんじゃないの?
Windowsはそこのパスを見てなかったような。
0901デフォルトの名無しさん
垢版 |
2020/12/27(日) 19:46:23.03ID:/HQdSjMP
Apacheは見てる
そんでApacheのあるドライブにuser/localのフォルダ作ってperl.exeをコピーしたら動くよ
0902デフォルトの名無しさん
垢版 |
2020/12/27(日) 21:30:33.15ID:CEWAcbKQ
そうだっけか?

ちなみに、もしそのファイルに拡張子があるならレジストリで指定する方法もある。
「windows apache レジストリ 拡張子」で検索!
0903デフォルトの名無しさん
垢版 |
2020/12/28(月) 00:11:42.69ID:oUNoRxKm
perlプログラム中に指定するルートパスについてだけど

open(IN,"/test.html");
my @lines = <IN>;
print "@lines";
close(IN);
とやっても@linesは空で何も取得できなかったけど

print "<a href=\"/test.html\">リンク</a>";
でリンクをクリックするとちゃんとドキュメントルート直下のtest.htmlに飛べる
これはどうしてか?
test.htmlの中身は空ではない
0904デフォルトの名無しさん
垢版 |
2020/12/28(月) 00:28:09.86ID:AD+30T3D
>>903
ファイルシステムのルートとドキュメントルートはまったく異なる。
ファイルシステムはプログラム自身が処理するが、URLはまずブラウザが解釈する。

まず落ち着いてよく考えろ。
0905デフォルトの名無しさん
垢版 |
2020/12/28(月) 08:24:52.02ID:oUNoRxKm
>>904
つまりperlプログラム中で指定する/test.htmlはファイルシステムのルートパスになり
リンクタグで指定する/test.htmlはドキュメントルートのパスになるということですか?
0910デフォルトの名無しさん
垢版 |
2020/12/30(水) 21:55:58.30ID:Fpo/gio8
>>907
わかってるとはいえんよ。
結果のおうむ返しだけみたいだからな。

落ち着いて考えればわかるはずだし、それでしっかり納得したほうがいいことだから、元コメに返事はしないが。
0911デフォルトの名無しさん
垢版 |
2021/01/03(日) 17:25:22.42ID:Lv3VCxJc
ブラウザのクッキーを許可してるかどうかを調べるにはどうしたらいいんですか?
クッキーを書き込めたら許可されているというやり方だと
書き込んだ直後はクッキー読み取れない
更新ボタンでページを更新しないとクッキー読み取れないので他のやり方で
0912デフォルトの名無しさん
垢版 |
2021/01/03(日) 17:33:27.51ID:qCTYrijY
お、今年初めの質問だね。
君の悩みは質問箱住人が解決するよ。
ささ、甘酒どぞ。つ甘
みんなーお客さんだよー。
0913デフォルトの名無しさん
垢版 |
2021/01/03(日) 19:13:07.92ID:fvS6UGyp
>>911
javascript併用したくないならHTTPヘッダで
print "Set-Cookie: hoge\n";
print "Location: hage\\n\n";
みたいな感じでクッキー書いてリダイレクトすればいいんじゃね
0914デフォルトの名無しさん
垢版 |
2021/01/03(日) 20:53:05.77ID:Lv3VCxJc
>>913
なるほど、でもそれ無限ループにならないっすか?
0917532
垢版 |
2021/01/25(月) 02:03:08.62ID:NGykvctj
ttps://perlcodesample.hateblo.jp/entry/2020/07/10/082720
0920デフォルトの名無しさん
垢版 |
2021/02/13(土) 21:54:38.37ID:puXqs/bZ
あー
U+10000という文字列を置換したいのではなく、それが示すサロゲートペアを置換したい
0921デフォルトの名無しさん
垢版 |
2021/02/14(日) 01:36:58.65ID:u5RUQBwf
>>920
s/([¥x{10000}-¥x{1ffff}])/unpack(q{U},$1)/eg
かな?
ダメな気もするが。

つーか、さっきのURLにいろいろ書いてあるから、一度目を通して自分で試してみろ。
んで、うまくいったら、結果を貼るようにな。
0922デフォルトの名無しさん
垢版 |
2021/02/14(日) 07:32:21.90ID:kRUK3Bbl
$line =~ s/\x{1f306}/置/g;
これは成功する
$line =~ s/\x{1....}/置/g;
こんなことをやろうとしてた
$line =~ s/[\x{10000}-\x{1ffff}]/置/g;
これが正解だった
0923デフォルトの名無しさん
垢版 |
2021/02/14(日) 10:00:12.81ID:yrV2Bu9C
Perlの場合、マルチバイト文字で正規表現を正しく使うには、あらかじめEncode::decode()でデコードしておく必要があるので厄介。
0924デフォルトの名無しさん
垢版 |
2021/02/14(日) 11:18:28.10ID:u5RUQBwf
>>923
Perlに限らんやろ。
エンコーディングをまったく気にせず対応している処理系なんか存在しない。
0925デフォルトの名無しさん
垢版 |
2021/03/03(水) 18:48:52.48ID:Q9ky3RP3
start:aaa1
end:bbb1
value:1.23
start:aaa2
end:bbb2
value:2.34

データとして上記のようなstart,end,value値が違うデータがだらっと繰り返ししてるファイルがあって
下記の正規表現で名前付きキャプチャを使って繰り返しマッチングし%+ハッシュを配列に格納したいのですが、こんな感じでやるとそれぞれのデータが順に入ってしまいます。
どう書けばマッチングした各ハッシュを配列に格納出来るのでしょうか?
$re=qr|start:(?<start>\S+).*?end(?<end>\S+).*?value:(?<value>\S+)$|sm;
my @data = m|$re|g =~ $txt;
0926デフォルトの名無しさん
垢版 |
2021/03/03(水) 20:20:14.74ID:DgitZS9x
正規表現を使うところではない気がするな。w
ちょっとおちついて、行単位で処理していけよ。
0927デフォルトの名無しさん
垢版 |
2021/03/03(水) 23:36:11.18ID:Q9ky3RP3
>>926
そういうもんなんですか?
pythonだとre.finditerでイタレータ毎に取れるので似たような感じにperlでもどうにか出来るんだろうと思ったのですが無理そうなら諦めます
0928デフォルトの名無しさん
垢版 |
2021/03/04(木) 00:03:04.76ID:ls8aTj6l
Ruby なら、

line_num = 0 # 行番号

# 行末の改行を削除して、1行ずつ処理する
results = File.foreach( "test154_data.txt", chomp: true ).with_object( [ ] ) do |line, accm|

line_num += 1
# 3行毎に、ハッシュを作って、蓄積変数に追加する
accm.push Hash.new if line_num % 3 == 1

ary = line.split( ':', 2 ) # 左からコロンで、2つに分割する
hash = accm.last # 最後の要素
hash[ ary[ 0 ] ] = ary[ 1 ]

end

p results

出力
[{"start"=>"aaa1", "end"=>"bbb1", "value"=>"1.23"},
{"start"=>"aaa2", "end"=>"bbb2", "value"=>"2.34"}]
0929デフォルトの名無しさん
垢版 |
2021/03/04(木) 00:11:02.54ID:Pkas/NOZ
>>927
可不可の話なら、while (m/start..end/g) {...}みたいにしたらきっとできる。

しかし、オレならやらん。
Pythonは詳しくないが、たぶんそれでもやらんやろなあ。

正規表現の使いどころとしては非効率的だし、エラー対応が非現実的だし。
また、対象はファイルの内容だそうだが、ReDoSは知ってるか?
0931デフォルトの名無しさん
垢版 |
2021/03/04(木) 00:42:19.66ID:2AXWpxTy
perlリスペクト公言言語だから敬意を評してるんじゃないかな、大目に見てあげよう
0932デフォルトの名無しさん
垢版 |
2021/03/04(木) 09:09:52.94ID:8OZ033Zi
元がファイルだからなあ
1行ずつ分かれてるものを合体させてまた分離する、というのが無意味に見える

正規表現は柔軟性なので、使わなくていいくらいかっちりしてるものには
使わない方が安全側に倒れる
元ファイルが手書きで、無駄な改行やコメントが入ってるなら正規表現
0933デフォルトの名無しさん
垢版 |
2021/03/07(日) 10:07:03.25ID:Anqe+9Rf
forkがハングする。

見えてる範囲だと、memoryの使用量が関係してかもしれないです。
firefoxを使って1G程度メモリを食わせてからスクリプト走らせると、forkが返ってこなくなる。
この時のメモリ使用量は他も併せて25%程度。閉じてから再度走らせるとちゃんと動く。
エラー値返してくれたら助かるのだけど、ハングなんで困ってます。
アドバイスいただけるとたすかります。

Strawberry perl 64bit 5.32.1
Windows10Pro 64bit version 2004
Corei3-4370, Memory 12G
0934デフォルトの名無しさん
垢版 |
2021/03/07(日) 10:45:56.10ID:Q92Mc+WL
安定して動かないならバグっている

だいたい動くけど、ごく稀に動作がおかしい、ということがforkはある
forkがコケても動くような仕組みにすればok
0936デフォルトの名無しさん
垢版 |
2021/03/07(日) 11:48:43.53ID:Anqe+9Rf
>>934 ありがとう。
メモリ使用量が低いと成功。
firefoxでもタブ1枚ぐらいなら成功。
firefoxでタブ(yahoo.com)10枚開くと、確実にハング。

ラクダ本にも、失敗(戻り値undef)の対処法が書いてありますね。
WindowsOSがらみなので、イロイロありそうなのは察します。
でも、forkを呼び出したらハングして帰ってこないからなぁ。
コケるというよりは、forkを呼び出さない:
  if( $can_fork ) {fork;}
ってな書き方が必要になってしまう。
0937デフォルトの名無しさん
垢版 |
2021/03/07(日) 11:53:44.14ID:Anqe+9Rf
追記:
perlスクリプトとfirefoxは関係ありません。
単に、デスクトップで調べものしながら、コマンドプロンプトでperlインタプリタ
を起動して作業しているだけです。連投失礼しました。
0938デフォルトの名無しさん
垢版 |
2021/03/07(日) 12:10:59.62ID:3xq9+JKJ
ActivePerl の Windows 版では fork() がエミュレーションされているらしい。

実際に呼び出してみるとスレッドがひとつ増える。
中ではおおかた CreateThread() でもしてるんだろう。
0939デフォルトの名無しさん
垢版 |
2021/03/07(日) 12:24:40.47ID:xy+MS7Fg
windowsで安定動作させたいならforkを使わずに自分で別スレッドか別プロセス立てるのが吉
0940デフォルトの名無しさん
垢版 |
2021/03/07(日) 14:22:59.45ID:Anqe+9Rf
>>938
perldocによると、ActiveStateとMSが頑張ったらしいよ。
エミュあつかいとのことです。

>>939 ありがとう。
スレッドでするわ・・・さすがにハングはだめだわ(^^;
0942デフォルトの名無しさん
垢版 |
2021/03/07(日) 17:38:53.17ID:quYd9iFF
再帰はええやろ。
forkはもともとUNIX用で、Windowsとは相性が激悪なだけやから、しゃあない。
0943デフォルトの名無しさん
垢版 |
2021/03/07(日) 17:49:12.06ID:Q92Mc+WL
階層ディレクトリを辿る、みたいなとこに再帰を使うと止まらなくなったりする
絶対止まると保証されてるとこにしか使えなくて、そういうのは別に再帰でなくてもやれる

隅々までどうなってるか判らないものに再帰は威力を発揮するけど、
そういうのは往々にして停止性が保証されない
0946デフォルトの名無しさん
垢版 |
2021/03/07(日) 23:39:46.89ID:quYd9iFF
>>943
再帰終了をちゃんとできないヤツは、ループ終了もできないやろ。w

ディレクトリうんぬんに限って言えば、ファイルシステムへの知識が足りないとかか。
リンク系の。
0947デフォルトの名無しさん
垢版 |
2021/03/07(日) 23:53:02.15ID:Q92Mc+WL
軽く考えてるけど、プログラムの停止性ってもっそい奥が深い
ゲーデルの不完全性定理と密接に絡んでる
0950デフォルトの名無しさん
垢版 |
2021/03/08(月) 01:47:35.66ID:6lKYXbK2
>>947
バグが存在しない証明は超難しいから、ふつうやらない。
かわりに、テストを必要なだけする。
それだけのこと。

原理とやらは学者に任せておけばいい。
0951デフォルトの名無しさん
垢版 |
2021/03/08(月) 10:04:20.07ID:XzCJxGl3
ggl先生に "perl dir tree" で検索かけたら自作ページが多いね。
安心安全鉄板ライブラリとかってあるかな?
素人考えでなんだけど・・・OS別、FS別なんてあるんかの。
0952デフォルトの名無しさん
垢版 |
2021/03/08(月) 10:17:22.69ID:SORPad+v
親にリンクしていてループするのが困るので、
全部の子に対してカウンタを持たせる、くらいしか回避方法が無いんだよな
それだと再帰でやってるうまみが無くなってしまう
0956デフォルトの名無しさん
垢版 |
2021/03/08(月) 17:21:12.95ID:6lKYXbK2
>>952
リンクを不用意にたどるな。
既存コマンドでもオプションにしがちだし、ディレクトリ構成によっては死ぬくらいだから、しゃあない。
0958デフォルトの名無しさん
垢版 |
2021/03/08(月) 17:40:53.14ID:SORPad+v
ディレクトリならどこかにある実体のコピーだろうから、リンクなんか無しで済むけど、
より一般化したリスト構造だったら辿らない訳にいかない
だから、事前にループしていないことを確認してから処理することになって、
そのテストがループにはまる
0959デフォルトの名無しさん
垢版 |
2021/03/08(月) 20:06:16.14ID:3P7OMB5d
>>957
試してみたが、no_chdirは関係ない。
File::Findは、dir /S /B コマンドのパイプ読み取りに比べて、3倍も時間がかかる。
File::Findは遅いだけでなくコールバックでユーザー変数を扱えない欠点があるから、私はFile::Findを使わない。
0960デフォルトの名無しさん
垢版 |
2021/03/08(月) 21:30:38.88ID:3P7OMB5d
File::FindはUnix系OSで使う場合は find コマンドのパイプ読み取りと同等か少し速い。
File::Findが明確に遅いのはWindows向けにビルドされたPerlの場合のみ。
0962デフォルトの名無しさん
垢版 |
2021/03/08(月) 22:39:10.09ID:3P7OMB5d
>>961
残念ながらネイティブに最適化されているはずのActivePerl や Strawberry Perl でFile::Findが遅い。
原因は知らないけどWin32APIの使い方が良くないからだと思う。
0963532
垢版 |
2021/03/09(火) 00:11:34.07ID:jxvXMO9/
$^WIN32_SLOPPY_STAT じゃね?

File::FindはWindowsだと、SJISで全角「構」などの2バイト目が\(0x5c)のフォルダに遭遇すると
無限loopしたり誤動作するから、結局Wndowsでフォルダ階層を再帰的にたどるには
utf8化したperl sourceで自分でopendir, readdirして、encode, decodeせにゃならん。
0964532
垢版 |
2021/03/09(火) 00:15:08.81ID:jxvXMO9/
別件だがWindowsではSJISで全角「構」などの2バイト目が\(0x5c)のフォルダには
perlからlstatやutimeが出来ないみたいで難儀した。
Linuxのutf8のファイルシステムと違ってWindowsのSJISファイルシステムは面倒
0965デフォルトの名無しさん
垢版 |
2021/03/09(火) 01:17:12.50ID:B0uPByTP
>>962
そうやったか。。。

>>964
NTFSファイルシステム自体はUTF-16やぞ?
MicrosoftがようやくいよいよコマンドプロンプトとかNotepadとかのUnicode対応を考えはじめてるし、いずれWindows版も対応するんちゃうか。
いっそツッコんだら?
0966928
垢版 |
2021/03/09(火) 05:19:08.22ID:NUN2sKP0
>>925
Ruby で、元のファイルを、CSV へ変換してみた。
データ中に、ダブルクォーテーション・カンマを入れても、正常に動く

require 'csv'

line_number = 0 # 行番号

# 行末の改行を削除して、1行ずつ処理する。蓄積変数は2次元配列
results = File.foreach( "input.txt", chomp: true ).with_object( [ ] ) do |line, accm|
line_number += 1
accm.push [ ] if line_number % 3 == 1 # 3行毎に、空配列を追加する

ary = line.split( ':', 2 ) # 左からコロンで、2つに分割する
last = accm.last # 最後の要素 (配列)
last.push( ary[ 1 ] ) # コロンの右側を、配列に追加する
end

results.unshift %w(start end value) # 先頭に、ヘッダー行を追加する
# p results

csv_str = results.map( &:to_csv ).join # 2次元配列を、CSV 文字列に変換する
print csv_str

出力
start,end,value
a_1,"b""1",1
"a,2",b_2,2.34
0967デフォルトの名無しさん
垢版 |
2021/03/09(火) 08:00:45.91ID:4CK4kuWA
コマンドプロントはとっくにUTF-16対応している。出力フォントが表示に対応していないだけ。
コマンドプロントにはもう機能追加されないから Windows Terminalに乗り換えたほうがいい。
0968デフォルトの名無しさん
垢版 |
2021/03/09(火) 08:27:17.16ID:4CK4kuWA
コマンドプロントは今でもすでに非システムコード文字(アラビア文字やハングルなど)をコマンドに引数渡しできる。
受け取る側のアプリがUTF-16形式で起動時の引数を取らなかったり、batファイルが非システムコード文字に対応していないだけ。
コマンドプロントの努力だけではどうしようもない。

なお、Windows向けビルドされたJavaやPerlは非システムコード文字を引数で受け取れない制約がある。
プログラム側で自力でbase64エンコード対応するなどして回避するしかない。

一方、Windows向けビルドされたPythonは非システムコード文字を引数で受け取ることができる。
Pythonのプラグインを作ったことある人なら分かると思うが、Pythonはインターフェース間の文字列のやりとりにUTF-16を使っている。
0970532
垢版 |
2021/03/09(火) 08:45:38.83ID:UTQZC5u1
NTFSってUTF-16だったのか、
しかしperlのreaddirはcp932で返してきているような気がs…
0973デフォルトの名無しさん
垢版 |
2021/03/09(火) 10:44:51.95ID:SbXzcieK
>>968
> コマンドプロントの努力だけではどうしようもない。

そらそうや。
ついにcp932から離れようとする世の方向性を受けて、Perlも変わるんじゃねえの、という話。
Perl7とかでそういう話は出てないんかな?
知らんけど。

> なお、Windows向けビルドされたJavaやPerlは非システムコード文字を引数で受け取れない制約がある。

制約つーか、むしろ互換維持とかただ昔のままほったらかしとかやろ。w
0974デフォルトの名無しさん
垢版 |
2021/03/09(火) 10:56:11.55ID:SbXzcieK
>>971
そのおかげで、20年以上昔からふつうにWindowsで使えてきたわけだからしゃあない。
むしろありがたかった話。
0975デフォルトの名無しさん
垢版 |
2021/03/09(火) 12:55:12.46ID:NUN2sKP0
Windows 10 Home でも、Docker が出来るようになった。
ただし、Windowsの連続更新に、3時間も掛かったけど

WSL2, Ubuntu でも使えば?
漏れは、Ruby on Rails をやってる

Linux側には、日本人が作った、バージョンマネージャーのanyenv で、
rbenv, nodenv を使って、ruby 2.6.6, node 12.16.2 も入れた

Dockerでも良いし。
ただし、メモリ8GB じゃキツイ。16GB は欲しい
0976デフォルトの名無しさん
垢版 |
2021/03/09(火) 20:18:30.71ID:BijZjsz/
正規表現のパターンの中に変数を書くとおかしくなりますが、どうしたらいいでしょうか。

やりたいこと:「hoge」の後ろがカンマか行末の場合を抽出したい

$pat = "hoge[,\$\]";
if( $str =~ m/$pat/ ){...}

こう書くと $pat が「hoge[,$]」になることはデバッガで確認できたのですが、思った通りのマッチになりません。マッチングの部分に $pat ではなく定数で「hoge[,$]」と書けばマッチングします。

どう書いたらいいでしょうか?
0980976
垢版 |
2021/03/09(火) 22:41:12.95ID:BijZjsz/
色々やって混乱して間違った事を書いていました。
やりたいことは >>976 の通り。
>>979を見てそれならばと「$pat = "hoge,{0,1}\$"」と書いたら目的を達成できました。

お騒がせしました。
0984デフォルトの名無しさん
垢版 |
2021/03/10(水) 06:16:01.51ID:S+G6vYN6
>>980
近いといえば近いが、そういう書き方をしたいなら「, で始まる文字列」じゃないか。
hoge(,.*)?$

あと、Perl には \z もあるよ。
0985976
垢版 |
2021/03/11(木) 11:15:21.72ID:VAAe2gi6
みなさん、こんなアホに付き合ってもらってありがとうございます。
疲れてたのかな、俺。

まだ試してませんが、教えていただいたやり方でチャレンジしてみます。
0986532
垢版 |
2021/03/11(木) 11:39:56.33ID:AlcqB+X5
$pat = 'hoge(?:,.*)?$';
print "1\n" if 'hoge,dsad' =~ $pat;
print "2\n" if 'hoge' =~ $pat;
print "3\n" if 'hage' =~ $pat;

はどうよ

実行例
~ $ perl 64_976_hoge_pat.pl
1
2
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 780日 13時間 56分 57秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況