◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

Perlについての質問箱 64箱目 YouTube動画>8本 ->画像>5枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1548981877/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん
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://2chb.net/r/tech/1381561905/
Perlについての質問箱 62箱目
http://2chb.net/r/tech/1385039352/
Perlについての質問箱 63箱目
http://2chb.net/r/tech/1392820583/
2デフォルトの名無しさん
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/
3デフォルトの名無しさん
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/
4デフォルトの名無しさん
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
5デフォルトの名無しさん
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 でエンコードする必要があります。
6デフォルトの名無しさん
2019/02/01(金) 23:49:26.97ID:sNV+JFAU
今更だがCGIとPerlの区別ってなんだよw
7デフォルトの名無しさん
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 は環境変数や標準入出力の扱えるプログラミング言語で扱うことができる。
8デフォルトの名無しさん
2019/02/02(土) 10:20:47.06ID:ZgweYnRo
(洋書) Mastering Perl: Creating Professional Programs with Perl 2nd Edition [2014/1/27]
https://www.amazon.co.jp/dp/144939311X/
マスタリングPerlの第2版

(洋書) Programming Perl: Unmatched power for text processing and scripting 4th Edition [2012/3/9]
https://www.amazon.co.jp/dp/0596004923/
プログラミングPerlの第4版
9デフォルトの名無しさん
2019/02/03(日) 01:42:34.74ID:72eosYJ+
>>7 perl で書けばperl そのものじゃん。

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

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

めんどくさいと言うか、正常に動くのかどうか不安なんだが
一応表面上は正常に動いたように見えても、俺にはそれはまやかしに感じるんだが
13デフォルトの名無しさん
2019/02/18(月) 00:58:26.57ID:pGUSPpE4
はいやっぱりバグったファイルの読み込みが出来なくなった
14デフォルトの名無しさん
2019/02/18(月) 13:29:31.02ID:trvxFZJG
そういやUTF8だとprintfとかで幅を揃えるのができなくなったりして大変だな。
%-10sとかやっても漢字が入るとそこが出力時に3バイトになったりしてずれて役に立たない。
こういう幅とか考慮してフォーマットしてくれるモジュールあるんだろうか?perlだから誰かが作ってそうではあるが。
15デフォルトの名無しさん
2019/02/18(月) 15:02:51.14ID:+OgI4mQP
Unicode::GCStringでカラム数とれるっぽいから空白いくつ詰めるかは計算できそう
16デフォルトの名無しさん
2019/02/18(月) 18:04:58.85ID:pGUSPpE4
かなり頑張ったがUTF8にするのは無理だということになって諦めた
sjisとEUCとutf8が無駄に入り乱れる結果になった
ファイル名はプログラム内部ではEUCで扱ってたり、実際のファイル名はsjisだったり、ファイルの中身はEUCだったり、通信はsjisだったり、
そもそも文字単位じゃなくてバイト単位でデータを管理する記述がめっちゃあったり、
ゴミかよ!
17デフォルトの名無しさん
2019/02/18(月) 20:51:52.45ID:trvxFZJG
一生を掛けて修復するプログラムになったようだな。
18デフォルトの名無しさん
2019/02/18(月) 20:52:30.58ID:trvxFZJG
>>15
おお。ありがとう。やはりあったか。
19デフォルトの名無しさん
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" って言われた。
どこかに書いてあったっけ?
20デフォルトの名無しさん
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つで、これを解決するにはどうしたら良いか?
もう一つは、ブラウザごとの仕様によりこの挙動は違うのか?
の二点だ
よろしく頼む
21デフォルトの名無しさん
2019/02/26(火) 20:23:51.98ID:c2o2e7e/
>>20
自分でファイル名をそういう風にエンコードすれば?
22デフォルトの名無しさん
2019/02/26(火) 20:30:51.25ID:vB+znWqX
>>21
すまんが読めなくなるから駄目

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

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


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

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

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

まあおまえらありがとうな
utf8ならまだしもcp932のファイル名をそのまま使おうとした俺が悪かったんだよきっと
でもwindowsがcp932のファイル名だからしょうがないんだよ
31デフォルトの名無しさん
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・スマホがその言語に対応していない場合に、バグる
32デフォルトの名無しさん
2019/02/27(水) 10:18:43.12ID:HuFKesk6
バグる、ですか
3331
2019/02/27(水) 12:43:30.58ID:MitD/HmJ
漏れは、web 系の本を、軽く数十冊は読んでるけど、
sjis のファイルを使う本は、見たことがない

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

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

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

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

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

要はとにかく、サーバーがURLを受けてから、それをランタイムで変換して実際のアクセス先を決めることはできるはず、という提案。
35デフォルトの名無しさん
2019/02/27(水) 13:19:18.71ID:FWLYBGBg
>>31
URLデコードを禁止できるか?
URLの仕様なのに。
それに、もししたとしたら、CGIの引数とかどうなるんだ?
36デフォルトの名無しさん
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
俺のサーバーじゃないけどそんなこと出来るのか?
3731
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
38デフォルトの名無しさん
2019/02/27(水) 20:57:58.02ID:Hcodp8Vt
>>36
レンサバでも、管理者だったらいろいろできる。
しかし、もしそうだったとしても、どうやらたぶんおまえにはムリぽなので、もうあきらめろん。
39デフォルトの名無しさん
2019/03/02(土) 02:33:03.15ID:LJe83Rmr
>>20-21
ブラウザごとにURLエンコードは統一は取れてなかったと思うよ
まず開発環境としてANHTTPDの使用をやめることをお勧めする
IISかApacheをインストールして使った方がいいと思う
40デフォルトの名無しさん
2019/03/04(月) 18:44:25.85ID:G/cMwSEz
http://2chb.net/r/airline/1551189110/

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

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

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

eval {

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

};

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

>evalはいらないと思うけど
よく覚えてないけど、evalはシグナルに対応してないシステムだとエラーで落ちる気がした
53デフォルトの名無しさん
2019/03/07(木) 00:21:03.62ID:pkHUcH4A
perlipc を読むといいかも。
http://perldoc.jp/pod/perlipc
54デフォルトの名無しさん
2019/04/26(金) 17:48:05.44ID:T3sMMsV1
Perl News に "Fork yeah!" というのがあってちょっと驚いた。
https://www.perl.com/article/fork-yeah-/
55デフォルトの名無しさん
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用の言語じゃないから標準モジュールからは消した とか
そんな理由ならいいんだけどさ。。
56デフォルトの名無しさん
2019/04/29(月) 01:34:45.78ID:EAhXUlQz
「core は出来るだけ小さく」
「CGI はもはや Web の主流ではない」

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

そもそもさくらレンタルサーバーで使える perl って 5.8 〜 5.14 ぽいけど
https://help.sakura.ad.jp/hc/ja/articles/206053142#ac05
57デフォルトの名無しさん
2019/04/29(月) 01:57:14.83ID:OgUfT4lW
>>56
どもども
その理由なら安心ですわ
perlのバージョンは確認したんだけど、消えた理由によっちゃ使うの気持ち悪いなーと思ったので
どもでした。
58デフォルトの名無しさん
2019/05/21(火) 19:09:48.73ID:ItBIHcGN
5.30が出るのかと思ってたら、出てねー

やる気ねーのかよ
59デフォルトの名無しさん
2019/05/21(火) 21:00:16.28ID:BVi2WQ22
ていうかこんなに長くアップデートが続いていることだけでもかなり凄い事だと思う。
60デフォルトの名無しさん
2019/05/21(火) 22:12:45.42ID:vpg4l/5q
5.30.0 RC2までは出てるからそのうち出るだろ
61デフォルトの名無しさん
2019/06/01(土) 02:23:48.95ID:4bbBO9Ct
$str =~ /$pattern/
みたいなことはできるけど、
$str =~ /$pattern/$opt
みたいにして大文字小文字を同一視するかどうかを動的に指定したい
if文で処理行を分けるしか無理?
62デフォルトの名無しさん
2019/06/01(土) 04:41:47.86ID:uuPo6pHP
>>61
eval 使えばいいのでは?
63デフォルトの名無しさん
2019/06/01(土) 08:47:17.23ID:GQlgchjf
Ruby では、Regexp オブジェクトで、動的に作れる

str = "aB"
opt = Regexp::IGNORECASE

p re = Regexp.new( str, opt )
#=> /aB/i
64デフォルトの名無しさん
2019/06/01(土) 10:32:32.69ID:uuPo6pHP
パターンマッチの直前で比較対象の文字列を uc() 使って小文字を全て大文字に変換しておく、または lc() で大文字を全て小文字にしておく事でも実現できるな。
パターンの方にも変換必要になるかも知れないが、それについては予め大文字または小文字でパターン作っておけば回避できる。
65デフォルトの名無しさん
2019/06/01(土) 10:33:06.85ID:4bbBO9Ct
ただ、どう考えても遅くなるよな
素直に切り替えよう
66デフォルトの名無しさん
2019/06/01(土) 11:42:41.31ID:UESmRH3l
>>61
# http://perldoc.jp/docs/perl/perlre.pod#Extended32Patterns
my $subject = 'FooBar';
my $search = 'foobar';

my $pattern = qr/$search/;
print $subject =~ /$pattern/ ? 'match' : 'unmatch', "\n";

$pattern = qr/(?i)$search/;
print $subject =~ /$pattern/ ? 'match' : 'unmatch', "\n";
67デフォルトの名無しさん
2019/06/01(土) 11:49:39.64ID:4bbBO9Ct
(?i)と書いておけばいいだけか
じゃあもう実装済みで、使う側でどうにでもできる
68デフォルトの名無しさん
2019/06/01(土) 13:34:35.95ID:zyIO0HLx
Python ってダサいよね。
69デフォルトの名無しさん
2019/06/13(木) 09:38:18.19ID:8EHJsjb3
Pythonはほどほどの長さのスクリプト言語としてならアリなんだが
ツールとしては良くも悪くも電卓だなぁ
70デフォルトの名無しさん
2019/06/14(金) 01:28:05.42ID:TwyiKBjF
バッチは使いやすさでperl、サーバだと今はパフォーマンスで選んでgolangやろうとしてるわ
71デフォルトの名無しさん
2019/06/14(金) 21:23:40.01ID:GJHBGGzo
https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00682/061100007/
Pythonはコードが書きやすい?ご冗談でしょう
72デフォルトの名無しさん
2019/06/14(金) 23:12:24.97ID:oN4k2Se6
>>71
読んだけど、実際にはタイトルほどPythonを悪くいってないな。w
73デフォルトの名無しさん
2019/06/16(日) 10:31:31.41ID:Q48cejx2
windowsでreaddirするとcp932で読めてくる

それだと面倒なので、opendirする時か、ハンドラに対して、
decoding(cp932) みたいに指定するにはどうすればいい?
74デフォルトの名無しさん
2019/06/16(日) 14:26:37.09ID:bI4lsVP6
https://www.javadrive.jp/perl/file/index12.html
75perltidy バグってない?
2019/06/28(金) 03:27:32.11ID:yOZUOG90
perltidy -pbp -nola perl_file
この -pbp は perl best practices にする設定になっている
という仕様が書かれているが

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

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

これバグだよな?
76バグもういっこ
2019/06/28(金) 03:37:53.64ID:yOZUOG90
Perlについての質問箱 64箱目 	YouTube動画>8本 ->画像>5枚
左のように綺麗にまっすぐ整えろ が本の通りなのに
右のように変なところにいく
77デフォルトの名無しさん
2019/06/28(金) 05:48:53.09ID:MYNfkfjj
何語?
78デフォルトの名無しさん
2019/06/28(金) 14:53:22.61ID:oMWPNRS2
perl にインデントを求めるな。
79デフォルトの名無しさん
2019/06/29(土) 00:24:21.75ID:YzN8MsSb
\(^o^)/
80デフォルトの名無しさん
2019/06/29(土) 05:53:24.17ID:3U68S2mZ
どうでもインデント
81デフォルトの名無しさん
2019/06/29(土) 15:13:13.34ID:3U68S2mZ
sjisでローマ数字のUが書いてあるのをutf8にすると、どうやっても化けるな
82デフォルトの名無しさん
2019/06/29(土) 15:18:34.74ID:3U68S2mZ
一旦生で読んでcp932でデコードすればいいのか
LWP:Simpleだとそのへんに手が出せない
83デフォルトの名無しさん
2019/06/29(土) 17:02:36.85ID:o1VtcfU0
MySQLもそうだけど、sjisは使っちゃイカンやろ。
細かいところで文字の置き換えルールがメチャクチャだったような。

いわゆるシフトJISはとにかくcp932で。
84デフォルトの名無しさん
2019/06/29(土) 17:53:32.74ID:3U68S2mZ
多分htmlに俺はsjisだと書いてあると、LWPが勝手にsjisでデコードするんだろう
85デフォルトの名無しさん
2019/07/06(土) 10:10:18.37ID:oMEfEQKE
元がeuc-jpだと、
$str =~ s/\x{301c}/〜/g;
みたいなことを明示的に書かないと、回避できないみたい
同じものやがな
86デフォルトの名無しさん
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";
87デフォルトの名無しさん
2019/07/12(金) 02:35:11.65ID:gPQuYcbX
my $test3 = $test;
$test3 =~ s/\\x([0-9A-Fa-f]{2})/pack('H2', $1)/eg;
print "$test3\n";
88デフォルトの名無しさん
2019/07/12(金) 04:04:28.94ID:yXcDIkyu
print eval qq/"$test\n\n"/;
8986
2019/07/12(金) 07:58:26.24ID:AjCqo1Mf
ありがとうございます!
90デフォルトの名無しさん
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


()[]が見おぼえがない
91デフォルトの名無しさん
2019/08/11(日) 05:17:44.88ID:GTeyRs5o
()で配列とみなしたとき
()[0]は定義されていると考えて
()[1]などは未定義で無しというトリックか
92デフォルトの名無しさん
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
93デフォルトの名無しさん
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
94デフォルトの名無しさん
2019/08/12(月) 10:00:54.45ID:1t9yEA1l
今はもう (1)[1] が空リストにならないんだな。perl5220delta に書いてあった。
リストコンテキストでの問題を避けるために
[split( /::/ , $class)]->[4]
みたいな書き方をしていたんだが。
いや、これは変えなくていいのか。
95デフォルトの名無しさん
2019/08/12(月) 10:16:24.43ID:BBJuWfXI
undefは省力とかフェールセーフ的に有効にするんじゃなくて、
厳密に仕様化して積極的に使うべきだよな

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

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

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

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

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

binmode STDOUT => ":raw:encoding(utf16le):crlf";
110デフォルトの名無しさん
2019/10/24(木) 22:37:27.00ID:rCe9ez9s
右から読むんだよ
111デフォルトの名無しさん
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に)

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

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

どんな言語でも金額の計算や小数点の桁を調整をする場合、
int(切り捨て)、round(四捨五入)、ceil(切り上げ)などで処理するか、
出力時に、printfやsprintfを使って、"%.0f"などを指定して桁を合わせる
必要があると思います。
115デフォルトの名無しさん
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};
116デフォルトの名無しさん
2019/11/06(水) 09:06:26.53ID:dfSHCt1W
浮動小数点の問題は知っていたが、こうなる事は初めて知った。危ないもんだな。

$c = $a / $b; # $c = 500
$e = int($c); # $e = 499
117デフォルトの名無しさん
2019/11/06(水) 09:28:51.28ID:i85ttsqs
>>111
それはバグではないし、昔々からある超有名な仕様。知らないのはお前だけ。
118デフォルトの名無しさん
2019/11/06(水) 10:08:35.95ID:yvB3xxPc
>>112
>>113
>>114
>>117
仕様で他の言語でもあるのですね。Perlで明示的な型指定とかはほぼ考えたことが無かった(1.08の時は意図した結果が得られていた)ので、勉強してみます。
ありがとうございます。
119デフォルトの名無しさん
2019/11/06(水) 10:29:25.24ID:i85ttsqs
言語というよりはライブラリやCPUの問題だ。
しかしだいたいのメジャーな言語が採用しちゃってるので言語に関係なく出ると思って良い。
120デフォルトの名無しさん
2019/11/06(水) 17:59:53.94ID:j94j+HrP
言語仕様っていうと違和感あるね
意図してこうしてますって感じで
IEEE 754の仕様といえばそうなのかもしれんがあれは規格であって
仕様とはまたニュアンスが違う なんつーか実数扱うときはそんなもんという感覚
121デフォルトの名無しさん
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して税とし、税込から税を引いて本体としました
とりあえず期待した結果は得られています

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

この行余計でした
123デフォルトの名無しさん
2019/11/06(水) 19:44:41.92ID:mEOqpT9o
>>120
C/C++なら規格が精密なのでそういう違和感もわかるが、Perlの場合は逆におかしいやろ。w
124デフォルトの名無しさん
2019/11/06(水) 19:52:26.69ID:mEOqpT9o
>>121
税率によってはきっとアカン場合がありそう。。。
単純な切り捨てはヤバいような。
まあ、そこまでの精度はイランのやろけども。

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

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

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

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

他は、自分でコード書くんだからファイルリストの管理すりゃいいだけの
話だし。
138デフォルトの名無しさん
2019/11/17(日) 00:47:01.26ID:7P3Fm4Oa
>>137
ファイルハンドルだけもらうクラスかもよ
139デフォルトの名無しさん
2019/11/17(日) 01:44:18.01ID:cO7DNsZu
いや、気持ちはわかるやろ。
ファイルハンドルは、しょせんハンドルでしかないと納得するのは、事情がある程度わかってからなんだから。
140デフォルトの名無しさん
2019/11/17(日) 07:47:40.51ID:bNRHw2eJ
ファイルハンドルをインクリメントすると次のファイルを指すハンドルになることはあまり知られていない。
141デフォルトの名無しさん
2019/11/17(日) 12:07:49.00ID:Ew4nGi4g
>>140
それは、Perlのファイルハンドルの話か?
Cのファイルポインタではなく?
142デフォルトの名無しさん
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 を使い続けることになるのかな。
なぜ、こんな事をするのだろうか?
143デフォルトの名無しさん
2019/11/18(月) 20:45:39.28ID:2uYwgX87
Strawberry Perl 使えよ
144デフォルトの名無しさん
2019/11/22(金) 22:32:44.69ID:G0qxcoi/
そういやみんな最新の安定版使ってんの?
うちは5.20で止めてる。特に意味はないんだけどこれが安定してるってどこかで見たから。
145デフォルトの名無しさん
2019/11/22(金) 23:56:39.64ID:0hNsLKVA
5.16.3だな
多分意味は無い
146デフォルトの名無しさん
2019/11/23(土) 00:04:49.15ID:pA1s2lMR
俺もCentOSのデフォルトだわ
5.16.x
もう枯れてるしね
147デフォルトの名無しさん
2019/11/23(土) 00:20:10.52ID:FBMqwUlj
ずっと5.8.9のままだわ
とにかく安定している
148デフォルトの名無しさん
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"

どのようにすれば入力ファイルの指定と変数渡しを一緒にできますか?
149デフォルトの名無しさん
2019/11/23(土) 01:52:51.48ID:0LKgjFg3
5.30.0
なるべく最新の安定版を追っかけてる
150デフォルトの名無しさん
2019/11/23(土) 02:19:04.46ID:En+bKilB
>>148
STDERRにprintすれば?
151デフォルトの名無しさん
2019/11/23(土) 10:12:25.15ID:Dim3LBiC
perl5.26.1
perl2exe 使うので。
152デフォルトの名無しさん
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
153デフォルトの名無しさん
2019/11/25(月) 10:33:31.52ID:veETdbiQ
>>152
-i があるからでは?

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

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

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

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

いろいろ勘違いしてるぞ。
158デフォルトの名無しさん
2020/02/02(日) 08:34:53.41ID:7b/FZYuN
>>157
話が通じなさそうで大変よろしい
159デフォルトの名無しさん
2020/02/02(日) 13:46:05.69ID:9cWLJdKQ
s/(pattern)/\1/
という使い方をするもんだと思いこんでいて、謎のバグに悩んだ
160デフォルトの名無しさん
2020/02/04(火) 19:17:18.71ID:64ds8brY
perl hacks買った
送料込み300円
161デフォルトの名無しさん
2020/02/04(火) 19:49:23.22ID:53yGrLtS
買われてしまった。
モダンperl入門でも買おうかな
162デフォルトの名無しさん
2020/02/05(水) 00:34:08.21ID:Yyzz6n+F
今さら「モダン」もないやろ。w
どうとでも好きに書いたらええがな。
163デフォルトの名無しさん
2020/02/05(水) 04:02:23.57ID:rxl56Lqp
モダンとか死語だもんな
そういうワード使うしかなかった当時の状況もあるけど
164デフォルトの名無しさん
2020/02/05(水) 17:51:27.40ID:9nK7Yle0
死語かなあ?
165デフォルトの名無しさん
2020/02/05(水) 21:33:12.52ID:SZWAnwkp
>>156
決定性有限オートマトンと非決定性有限オートマトンについて調べるといいぞ。
lex は前者で Perl は後者だ。
166デフォルトの名無しさん
2020/02/05(水) 22:58:10.81ID:TkSDhbEE
そういやモダンperl入門の新刊どうなった?
167デフォルトの名無しさん
2020/02/05(水) 23:00:15.23ID:TkSDhbEE
2014年1月予定か。たのしみやで。
168デフォルトの名無しさん
2020/02/06(木) 00:10:26.01ID:UIZEnib+
perlの最新本って、これくらいだろ
初めてのPerl 第7版 2018/01/20
Effective Perl 第2版 2015/02/17
169デフォルトの名無しさん
2020/02/06(木) 00:14:16.79ID:m/3X75FJ
クリスマスまでにはperl6の本が山のように出版されるからな
170デフォルトの名無しさん
2020/02/06(木) 00:24:20.95ID:T14/xjtC
ドラマ「3000回目のクリスマス」
171デフォルトの名無しさん
2020/02/06(木) 00:30:59.99ID:6QnB4wyK
Perl6無くなったんじゃなかったっけ?
172デフォルトの名無しさん
2020/02/06(木) 14:10:21.68ID:EPBtHi1S
ちっちゃくRakuって書くんじゃない?
173デフォルトの名無しさん
2020/02/10(月) 22:55:04.23ID:hYCIpnsp
非決定性有限オートマトンは決定性有限オートマトンに変換できる
ていうか両者の能力は同じ(正規言語止まり
174デフォルトの名無しさん
2020/02/10(月) 23:09:15.59ID:O7nANUNm
ゲーデル?
175デフォルトの名無しさん
2020/02/11(火) 08:07:12.06ID:RnNFx+rl
んまーできると言っても状態数の爆発を伴うこともあるので
非決定性有限オートマトンのままにしといて入力が来たときに探索(バックトラック)で解決、
というのもアリっていやーアリ
176デフォルトの名無しさん
2020/02/11(火) 17:49:46.25ID:ix+UlUL8
名前変えたんだよね?やっぱ違いがありすぎて紛らわしいから変えたのか?
177デフォルトの名無しさん
2020/02/11(火) 17:50:45.15ID:ix+UlUL8
すまん。リロード忘れて間に他の書き込みが挟まった。Perl6の話ね。
178デフォルトの名無しさん
2020/02/11(火) 18:26:47.40ID:FJnR5oDj
ロゴもどうなんだ
179デフォルトの名無しさん
2020/02/11(火) 22:24:33.99ID:kUx05S+X
>>176
少なくとも、もうPerlでは無いと言うことだ
Perlの系譜にある別言語だね
180デフォルトの名無しさん
2020/02/12(水) 01:53:33.21ID:CB9IiDBv
YouTuberは「最強の職業」である理由。


【事例付き】YouTuberは最強の副業である件について。

;t=267s
【初心者向け】YouTubeの始め方・稼ぎ方を徹底解説!


「YouTubeなんていつか稼げなくなる」という主張を論破する。


収益化から丸1年!YouTubeでいくら稼いだか公開。

;t=103s
その動画で月商○○万!? YouTubeで稼ぐ裏技的アプローチ。

;t=433s
【貧者の工夫で戦え】ガラケーだっていい。YouTube始めるのにパソコンはいらない!


【第一回】SNS、YouTube、ブログで稼ぐ方法を、丁寧に解説します!

181デフォルトの名無しさん
2020/02/12(水) 07:13:33.96ID:ZjDcS8oe
元から別言語定期
182デフォルトの名無しさん
2020/02/12(水) 10:59:57.05ID:urwrbVLd
Python もそのくらいやって欲しい。
183デフォルトの名無しさん
2020/02/12(水) 16:01:22.42ID:SF/q3PcI
Rakuは設計当初からオプショナルな型システムあるし
numpyっぽい操作が言語組み込みだったり
いろいろ早すぎた
184デフォルトの名無しさん
2020/02/13(木) 01:14:31.03ID:on7ESczL
当初はすごいと思ったけど今見ると糞仕様だな
185デフォルトの名無しさん
2020/02/15(土) 12:59:07.78ID:8m1Cr/X/
ハッシュの配列とかも簡単にできるもんね。
perlで作ったプログラムをC++で作り直すと思うとゾッとするw
186デフォルトの名無しさん
2020/02/15(土) 14:49:16.24ID:av6eWd5V
ハッシュの配列とかスクリプト言語の類ならどれも同じようにできる。
Perlがだめなのは、スカラとリストの二つが存在することだな
同じ書き方をしても、使い方で意味が変わってしまう。
変わるだけならともかく違う解釈で動いてしまうからバグのもとに鳴る。
187デフォルトの名無しさん
2020/02/15(土) 16:00:24.43ID:CBuE7ub7
>>186
リストは使わずに全部リファレンスでやった方がいろいろ安全だよ
188デフォルトの名無しさん
2020/02/15(土) 16:25:27.75ID:33mO6l2/
なるほどそうかもしらん
189デフォルトの名無しさん
2020/02/15(土) 18:59:30.30ID:jU+J++ht
$aと@aが区別されるので調子に乗って、
$a->[0][0][0] と一緒に $a も使ってバグる
190デフォルトの名無しさん
2020/02/16(日) 20:31:14.76ID:7RTwZ9VV
まあ、自分で作るには兆便利だけど人のプログラムの修正やメンテはやりたくないなw
やっぱ、C言語ぐらい厳しくないとプロ用は無理だよね。
191デフォルトの名無しさん
2020/02/17(月) 00:50:46.53ID:qx2LCmQN
Cは厳しさが足りない!
192デフォルトの名無しさん
2020/02/17(月) 09:02:59.28ID:3xf/X3D3
他人が書いたものばかりでなく、1年前ぐらいに自分が書いたものを
修正しようとして、「なにやってんの?これ」と思う。
自分自身のために、「しつこいぐらいにコメントを入れる」を心がけてるよ。
193デフォルトの名無しさん
2020/02/17(月) 10:26:17.75ID:DZOr9dsV
それ以前にコメントがなくてもわかるようなコードにしてるよ
194デフォルトの名無しさん
2020/02/17(月) 13:13:07.93ID:ZZZ2hHJ7
マクロなコードは読んで意味がわかるものにするのは当然として
コメントはビジネスロジックと言うか、フローの説明じゃね
195デフォルトの名無しさん
2020/02/17(月) 13:17:02.86ID:5usMQUGr
書いてあることを説明する必要はない。
コメントで書くのは、なぜこんなフローにしたかだ
196デフォルトの名無しさん
2020/02/17(月) 13:21:56.88ID:ZZZ2hHJ7
ミクロだわ恥ずかしい(´・ω・`)
197デフォルトの名無しさん
2020/02/17(月) 15:20:38.00ID:wTmXuXv8
一見すると何やってんだか分からなくてもよく辿るとスゲエなこれ天才じゃねって思うことある
自分が書いたんだけどね
198デフォルトの名無しさん
2020/02/17(月) 20:40:48.55ID:Y4S6wB9m
書くのも読むのも全然困らないようなコードしか書かないのが理想

難解な処理は、きっともっとシンプルに解決できる
199デフォルトの名無しさん
2020/02/17(月) 22:34:20.51ID:qx2LCmQN
現実はそうではない。
200デフォルトの名無しさん
2020/02/18(火) 20:13:13.66ID:55IHv/fO
my @result = grep !$temp{$_}++, @list;

凄げーよね、@listをuniqにソートするコードだって。
パールならではだよね。
普通なにしてるかわからんよw
201デフォルトの名無しさん
2020/02/18(火) 20:25:02.62ID:2VKhUmei
それは慣用句なので割と判る
コメントくらい付けるけど
202デフォルトの名無しさん
2020/02/18(火) 20:32:09.78ID:KQgsUf00
result = list(set(LIST))

pythonのほうが圧倒的に簡単
203デフォルトの名無しさん
2020/02/18(火) 21:09:43.77ID:lAgti/Dg
>>200
これでなんでソートされるの?
204デフォルトの名無しさん
2020/02/18(火) 21:10:15.76ID:Z1cJ/QMX
>>200
それじゃあソートできてないだろ

my @result = sort grep !$temp{$_}++, @list;
205デフォルトの名無しさん
2020/02/18(火) 21:32:52.05ID:v/AIhdlf
>>202
sort 使わずに sort できるなんて凄いな。
206デフォルトの名無しさん
2020/02/18(火) 21:34:51.09ID:55IHv/fO
>>203
>>204
ゴメンソートは関係無かった。

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

パッとこのコードが書けるんならいいけど、ここで時間を掛けたくないよね。
207デフォルトの名無しさん
2020/02/18(火) 21:48:33.85ID:3v1Ek71E
普通のfor文で書けばよくね?w
208デフォルトの名無しさん
2020/02/18(火) 21:53:35.14ID:2VKhUmei
機能がはっきりしてるから、sub uniqか何かを作って言語仕様かのように書く
きっと既にあるから、コピペで済む
209デフォルトの名無しさん
2020/02/18(火) 22:00:21.17ID:3v1Ek71E
まあ余程の理由がない限り普通はList::Util使うね
210デフォルトの名無しさん
2020/02/18(火) 22:14:59.19ID:2AC9Ct1n
ワンライナーカッケー病なんだろ
211デフォルトの名無しさん
2020/02/18(火) 22:20:53.62ID:KQgsUf00
ハッシュを使ってカウントするなんてperlの定石なんだが
入門書のハッシュ解説で必ず載ってるぞ
212デフォルトの名無しさん
2020/02/18(火) 23:17:41.56ID:aJeTcUgK
>>209
普通は>>204でしょ
モジュールは精査して本当に必要なものしか入れない
まあ現場次第だと思うが
213デフォルトの名無しさん
2020/02/19(水) 00:10:20.47ID:XDqysw2e
>>200
Rubyだとuniqが使えるが配列の集合演算でもできる。
result = list | []
214デフォルトの名無しさん
2020/02/19(水) 00:43:04.19ID:6o0SSmsW
実装は面白くても実際の所普段の仕事では
わかりやすいインターフェースの関数にするから
そういう点で差はでないというね。
215デフォルトの名無しさん
2020/02/19(水) 01:02:36.28ID:mEonuRdN
>>214
PerlやRubyなら、わざわざ関数にはしないかな。
その場でハッシュにつめてキーだけ使うとかかなりふつうだから。
216デフォルトの名無しさん
2020/02/19(水) 01:53:16.69ID:IHihvCy5
ここ人いたんだ
217デフォルトの名無しさん
2020/02/19(水) 02:27:13.60ID:+yXfQCpG
オワコンだとかすたれた言語だとか言われるけどまだまだ使われてるから
218デフォルトの名無しさん
2020/02/19(水) 04:28:09.35ID:UqnCT+lt
>>200
いや。わかる。
君もそのうちわかるようになるよ。
219デフォルトの名無しさん
2020/02/19(水) 05:39:50.97ID:6o0SSmsW
>>215
そしてコメント書くぐらいなら関数にしろ
220デフォルトの名無しさん
2020/02/19(水) 09:01:28.79ID:pJACNDga
他人にわかってもらいたくないんだろう。
221デフォルトの名無しさん
2020/02/19(水) 09:31:49.80ID:oZi5GQ/y
ほら、こんなコードで実現できるんやで、
なにやってるか一見わからんやろ
説明しよか?

みたいに言いたくなったら、それは可読性が悪い証拠
222デフォルトの名無しさん
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;
}
223デフォルトの名無しさん
2020/02/19(水) 16:51:28.60ID:/J962Gym
perl使い生きてた
224デフォルトの名無しさん
2020/02/19(水) 18:36:12.61ID:X6PQVyJY
勉強になるというか、どこで学んだの
225デフォルトの名無しさん
2020/02/19(水) 19:52:56.93ID:SoQYbBiO
>>219
書かないから心配するな!
1+1と同じレベルだからな!
226デフォルトの名無しさん
2020/02/19(水) 20:07:21.32ID:pJACNDga
そういう思想の馬鹿しかおらんからperlは廃れたんだよ。
227デフォルトの名無しさん
2020/02/19(水) 20:07:27.51ID:zh3CM0eN
if (defined $table{$var}) {
 $var = $table{$var};
}

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

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

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

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

と思ってたけど、最近excelデータを入出力に使い出した
239デフォルトの名無しさん
2020/02/20(木) 20:33:42.77ID:0HRLUjae
短絡論理演算子を使うという方法もあるが、お気に召すかどうかは知らん。
240デフォルトの名無しさん
2020/02/20(木) 20:44:08.31ID:CqCGFBWH
>>227の例だと
$var = $table{$var} or $var
で概ね動くけど、空文字列なんかが入ってた時に誤動作する

判別はdefinedしか無いとして、それでも書ける短絡評価とは
241デフォルトの名無しさん
2020/02/20(木) 21:36:24.51ID:uxa6Suua
defined-or使うだけじゃないの?
$var = $table{$var} // $var;
242デフォルトの名無しさん
2020/02/20(木) 22:00:38.63ID:0HRLUjae
アンカー入れ忘れたのによく分かってくれたな。ありがとう。
243デフォルトの名無しさん
2020/02/20(木) 22:37:06.65ID:CqCGFBWH
そんな演算子知らん
244デフォルトの名無しさん
2020/02/20(木) 23:16:35.88ID:NRacWxGd
null合体演算子は最近の流行りやぞ?
245デフォルトの名無しさん
2020/02/21(金) 01:54:46.68ID:dQ0Yz//t
//流行ってる気がしない。
新しい機能を積極的に使う人はそもそもperlを使わないのではないか。
断固外氏のブログのネタにしかなってなさそう。
246デフォルトの名無しさん
2020/02/21(金) 02:18:25.95ID:YvRUEPlL
5.8じゃ使えないからね
それだけで使わない理由になる
247デフォルトの名無しさん
2020/02/21(金) 03:26:53.00ID:6/adwu75
細かいけど優先度は// > = > orだよ
248デフォルトの名無しさん
2020/02/21(金) 03:54:06.99ID:6/adwu75
>>227と等価なのは>>241
この例はdefinedだったから適用できるのね
判定が任意だとするとやはり2度書くしかないかね 例えば
if ($table{$var} % 3) {
 $var = $table{$var};
}
perlは同一値への参照と解釈して2回読みにはいかないという気の利いたことはしないだろうね
エクセプション入ったら変わる可能性あるしね
249デフォルトの名無しさん
2020/02/21(金) 03:58:30.72ID:6/adwu75
//=の逆バージョンあったらいいなとはたまに思うね
そこまで必要性ないという判断でないのだろうけども
250デフォルトの名無しさん
2020/02/21(金) 07:05:24.88ID:TnPEnehp
$table{$var} が $_ に入るような無害な処理をしておいて、
$var = $_ % 3 ? $_ : $var
と等価なシンタックスシュガーで処理する
みたいなことができれば
251デフォルトの名無しさん
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";
}
252デフォルトの名無しさん
2020/02/21(金) 09:57:55.58ID:PzVMR7sv
サブルーチンとか甘え。謎の記号を使って魔法のようなコードを書くのがPerlの醍醐味。可読性は悪
253デフォルトの名無しさん
2020/02/21(金) 12:24:11.67ID:TKnLlA6x
>>235
昔々 Perl/Tk 使おうと思ったが日本語対応が出来てなくて止めたことがある。
それ以来 Perl で GUI はやってない。
254デフォルトの名無しさん
2020/02/21(金) 14:01:10.98ID:OOdvSVAe
絶対やらないけど
$_ % 3 and $var = $_ for $table{$var};
255デフォルトの名無しさん
2020/02/21(金) 15:45:08.67ID:ooEapY6E
>>253
それ、5.6以前の話?記憶が曖昧だけど、utf8に対応した5.6あたりから、Tkで日本語使えたような気がするけど。
256デフォルトの名無しさん
2020/02/21(金) 18:15:13.09ID:TKnLlA6x
>>255
忘れた。20年ぐらい前だったかな?
257デフォルトの名無しさん
2020/02/22(土) 22:24:09.42ID:pvGxmVZm
裏でずっと何かしてるスクリプトを走らせておきたい
ActivePerlのウィンドウが出るのが嫌なので、wperlを起動してウィンドウを出さない
でも、wperlを起動する為のbatファイルのウィンドウがずっと出てる
batファイル以外のいい起動方法はないだろうか
258デフォルトの名無しさん
2020/02/22(土) 22:46:33.37ID:KpqdZij5
>>257
start "" "wperl ..."
259デフォルトの名無しさん
2020/02/22(土) 22:47:18.24ID:+QQ7ccWr
ショートカットでよくね?
260デフォルトの名無しさん
2020/02/22(土) 23:01:19.35ID:pvGxmVZm
wperl以降を""で括ると動かないけど、無くせば動いた
これでサーバ監視ができる
261デフォルトの名無しさん
2020/02/23(日) 06:57:52.64ID:6djC7Yo0
Linuxなら何も考えずにできるが・・・
262デフォルトの名無しさん
2020/02/23(日) 07:18:43.14ID:u5LzmB/p
pingが通るようにしてしまえばwindowsでもそういうのは既にある
263デフォルトの名無しさん
2020/02/23(日) 12:43:19.44ID:1MmoNroU
>>261
シェルからふつうに起動したら、親プロセスとの関連でトラブルが発生するところはどちらも同じ。
というか、むしろLinuxのほうがわかりにくくてひどい。
disownとかnohupとか知ってるか?
264デフォルトの名無しさん
2020/02/24(月) 04:42:11.62ID:jrwZftYn
知ってるよ。
265デフォルトの名無しさん
2020/02/25(火) 12:21:34.80ID:Z4NIrtJK
>>260
何か使い方間違ってない?
次のようなコマンドで、普通に通るぞ。
wperl.exe "C:\utp\foobar.PL" "C:\foo\bar.txt"
266デフォルトの名無しさん
2020/02/25(火) 23:35:33.10ID:Vpd+P02x
>>265
>>258
267デフォルトの名無しさん
2020/03/05(木) 09:29:31.48ID:hJr+GlCd
ブラウザでは普通に見られる楽天市場の商品ページ
(item.rakuten.co.jp/shop_mei/a012345/)を get 出来なくなった。
ユーザーエージェントやらリファラはイジってみたけど
268デフォルトの名無しさん
2020/03/05(木) 12:43:29.56ID:eb4C0HQQ
active perl の ppm がなくなっていろんなモジュールが動かないのだが、困ってるの俺だけ?
ググっても誰も文句言ってないな
269デフォルトの名無しさん
2020/03/05(木) 12:50:46.42ID:WFS2X5DF
>>268
>>142 でオレが文句を言ったが。
結局、一生5.22 を使い続けることにした。
270デフォルトの名無しさん
2020/03/05(木) 14:56:24.55ID:NI6SkVuR
新しめのバージョン追ってる人はもう大半がactive perl捨ててstrawberry perlに移住したんじゃね
271デフォルトの名無しさん
2020/03/05(木) 20:36:47.91ID:HImUaDHG
つい最近ppm使ったような
272デフォルトの名無しさん
2020/03/06(金) 00:11:57.41ID:Wxp9Lzi1
strawberry perl なら cpan インストーラ、もう少しまともに動くのか。
明日、試してみる。
273デフォルトの名無しさん
2020/03/06(金) 08:49:13.30ID:20KFjtwq
https://community.activestate.com/forums/ppm

5.26以前なら、ppmは使えないことはないけど、「保守はしない」ということだね。
274デフォルトの名無しさん
2020/03/06(金) 09:25:47.73ID:7w4EZP5c
>>268
WSLでLinuxそっくり環境の中で普通のPerl使うかOS丸ごとLinuxにしてしまえば悩むことはなくなる。
275デフォルトの名無しさん
2020/03/06(金) 13:37:53.57ID:OG/dFmOQ
macという手も
276デフォルトの名無しさん
2020/03/06(金) 13:53:08.52ID:YSIXaKl0
visual studioインストールして普通にビルドすれば?
Makefileちょっと変更してnmake叩くだけだよ
277デフォルトの名無しさん
2020/03/06(金) 18:40:33.19ID:JNQJmFQ4
>>274
MSYS2のがええで。
WSLは別物。
278デフォルトの名無しさん
2020/03/06(金) 19:44:20.68ID:/FgvtXba
もう Perl6 でラクになれよ
279デフォルトの名無しさん
2020/03/06(金) 23:38:47.92ID:nrb1VEEF
strawberry perl をインストールしたけど、いろんなモジュールをまたゼロから入れなきゃいけないと思ったらヤル気なくなってとりあえず active perl に戻した。
次は active perl のディレクトリを調べて同じモジュールを strawberry perl にインストールするバッチファイル作んないと。
280デフォルトの名無しさん
2020/03/07(土) 06:00:24.07ID:Q6Yn3ttH
>>279
そんな時代はもう終わってるぞ。

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

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

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

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

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

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

> ダブルクリックでWSLのperlで実行できんの?
ファイルが見えてるんだから当然ダブルクリックできる。
もちろん関連付けは必要だがな。
それをWSL内で実行するのもWSLを使わずに実行するのも
関連付けの設定次第
305デフォルトの名無しさん
2020/03/10(火) 01:55:43.39ID:Lezaa9m7
ググれば普通に見つかる

Windows Subsystem for Linux でダブルクリックで sh ファイルを実行する
https://dskjal.com/PC/run-sh-on-bash-on-ubuntu-on-windows.html

Windows 10のbashのコマンドをGUIから起動させるには?
http://kako.com/blog/?p=16372
306デフォルトの名無しさん
2020/03/10(火) 02:35:30.61ID:iN6KW/Ct
WSL2は、Windows側のファイル属性とかちゃんとふつうにあつかえるようになったんか?
WSL1のときは完全別物で、全然ダメやったが。
307デフォルトの名無しさん
2020/03/10(火) 03:13:18.94ID:8QcyJ6p0
WSL1もWSL2も同じ。Linuxのファイル属性として正しく扱えるようになった。
Windowsのファイル属性をLinuxアプリが正しく扱えることはありえないから
逆の発想でLinuxとして正しく扱える方向に舵をとった。
Linuxアプリから正しく扱えないなら意味ないでしょ?
308デフォルトの名無しさん
2020/03/10(火) 03:17:19.61ID:8QcyJ6p0
そもそもファイル属性はWindowsの方が高機能で
Linuxは、いろいろ拡張入れたら別だが
基本のファイル属性はUNIX初期の頃から変わって無くてかなり貧弱。
Windowsの高機能なファイル属性をそのLinuxにマッピングすることは出来ない。
逆にLinuxのファイル属性を全てWindows側に持たせることは可能
こうすることで全てのWindowsのファイルをLinuxで正しく扱えるようになった。
309デフォルトの名無しさん
2020/03/10(火) 04:18:19.87ID:/bE8vLVb
漏れは、Ruby のバージョンマネージャー、rbenv をWSL, Ubuntu 18.04 に入れた。
これで、Linux 側に、好きなバージョンのRubyを入れられる

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

これが基本!
310デフォルトの名無しさん
2020/03/10(火) 04:23:54.01ID:qHN38Ccx
windowsでも開発できそうだなー
311デフォルトの名無しさん
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の環境で試してどちらも同じ結果になったのですが、こういうものなのでしょうか…。
312デフォルトの名無しさん
2020/03/10(火) 13:47:10.63ID:nryxofxk
>>305
アホか?
バッチファイルでwsl起動してその中で実行してるだけじゃん
レジストリ編集の方もパワーシェルに引数渡してwsl起動してるだけだ
これじゃあcygwin使ってやるのとなんら変わっとらん
313デフォルトの名無しさん
2020/03/10(火) 14:03:39.54ID:0m+9gBGV
>>312
あのさ、おまえ頭悪いよ?
目的を一番ラクに実現する方法が
目の前にあるというのにそれを使わないのはアホだろ
ネイティブのPerlを使えばいい
今更PerlのWindows移植版なんかいらんよ。
Windows移植版なんてcygwinと何も変わらん
314デフォルトの名無しさん
2020/03/10(火) 15:17:13.04ID:qHN38Ccx
>>311
試してみたけど確かに同じ配列が変えるね
オライリーのDBI本見たらそう書いてあった
selectrow_arrayって方を使ってリストコンテキストで受けるといいみたい
315デフォルトの名無しさん
2020/03/10(火) 15:22:16.39ID:tTiB+rjP
>>314
やはりそうですか…
selectrow_hashrefを使うと$sqlでも$sthでも'A', 'B'それぞれの結果が返るので、selectrow_arrayrefだけ期待と違う動作をしている気がします。(バグ?)
316デフォルトの名無しさん
2020/03/10(火) 15:28:19.27ID:qHN38Ccx
>>315
バグというか仕様だと思う
作者の書いたオライリー本にも書いてあったから意図的なはず
今更変更できないからこのままになってるんだろうね
317デフォルトの名無しさん
2020/03/10(火) 15:39:16.84ID:tTiB+rjP
>>316
なるほど。
それでは今後、selectrow_arrayrefは注意して使うようにしたいと思います。
ありがとうございました。
318デフォルトの名無しさん
2020/03/10(火) 15:58:50.16ID:SCW8qISh
>>313
へー
バッチファイル作ったりトリッキーな関連付けまでしないと動かないのが一番楽な方法ねー
cygwinで全く同じことができるしwin移植版perlならそのまま実行できちゃうんだけどね
ところでエクスプローラからどうやったらwsl内のファイルが見えるんだい?
319デフォルトの名無しさん
2020/03/10(火) 16:50:47.58ID:lAAHr9o2
>>311
selectrow_arrayref は最初の1行しか返さないからということはない?
320デフォルトの名無しさん
2020/03/10(火) 16:52:18.68ID:lAAHr9o2
ぐえ。リロード忘れたらとっくに話が終わっていて間に沢山の書き込みが
321デフォルトの名無しさん
2020/03/10(火) 20:10:42.81ID:UzsfbeET
BOOKOFFに100円で売っていたPerl/CGI辞典によると、
selectrow_array:先頭行
selectcol_arrayref:最初のフィールド
selectall_arrayref:すべて
322デフォルトの名無しさん
2020/03/10(火) 23:18:16.01ID:gGR9Cwad
>>318
Windows版Perl使って
Windowsで動かないーってやるより、
安心して使えるバッチファイルを使ったほうがシンプル
323デフォルトの名無しさん
2020/03/10(火) 23:32:00.36ID:Z32YaYnf
いやいやw
WSLならバッチファイルなんか使わなくてもエクスプローラーからダブルクリックでWSL上のスクリプトを直接実行できるんでしょ?
やり方教えてよ
windows版perlならバッチファイルなんか使わなくてももちろん出来るからねw
それとwindows版perlだと何が動かないのかな〜?
324デフォルトの名無しさん
2020/03/10(火) 23:37:16.41ID:9jB6JpZx
バッチファイルとかっていったい何歳の爺さんなんだよ
325デフォルトの名無しさん
2020/03/10(火) 23:42:56.03ID:tP5E2IWo
>>323
普通に、wsl.exe+スクリプトファイルのショートカットを作るだけ
326デフォルトの名無しさん
2020/03/10(火) 23:51:09.20ID:Z32YaYnf
>>325
やってることはバッチファイルと同じじゃん
327デフォルトの名無しさん
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 のファイルのアクセス権限の違いに、困らない!
328デフォルトの名無しさん
2020/03/11(水) 00:38:23.60ID:3jaBr8Hp
ルビーならそうだろうねw
329デフォルトの名無しさん
2020/03/11(水) 00:53:43.36ID:FWSDJbu9
>>326
それで実現できるだろ
しかも完全にちゃんと動くPerlで
330デフォルトの名無しさん
2020/03/11(水) 01:05:10.04ID:zcf0ykb5
ハア?
WSLはwindows版perlより楽できるんじゃないの?
なんでわざわざそんな面倒なことすんの?
それとエクスプローラからWSLのファイルが見えてそれをダブルクリックで実行できるって話はどうなったの?
331デフォルトの名無しさん
2020/03/11(水) 01:17:13.67ID:M00P+dL8
WSLはあくまでLinux的システムなアプリであって、Windows側とはやっぱり高い壁がある、と思っとくほうが安全やろ。
332327
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側のブラウザで見れる
333デフォルトの名無しさん
2020/03/11(水) 02:27:57.69ID:M00P+dL8
Webサーバーを経由すれば、ファイルが地球の裏側にあってもふつうに見れるなー。w
334327
2020/03/11(水) 04:58:50.64ID:EKM5ywjJ
Linux 側のフォルダ内を公開した、Linux側のサーバーに対して、

Windows 側のブラウザのlocalhost で見れるんだよ!!
335デフォルトの名無しさん
2020/03/11(水) 09:27:01.95ID:AZbrV/6V
>>319
>>321
返信ありがとうございます。
すみませんが、selectrow_arrayrefが最初の1行しか返さないということは知っています。
そうではなく、結果(リファレンス)を変数に入れてから再度同じステートメントハンドラでselectrow_arrayrefを使用すると、リファレンス実体の方が書き換わってしまうので、1回目の結果が失われてしまうということを言いたかったのですが…。
サンプルとして'パラメータ付きクエリ'と書きましたが、複数行を返さない単純な「SELECT ?」でも再現します。
336デフォルトの名無しさん
2020/03/11(水) 09:44:35.82ID:LRW51TqV
なるほど。
337デフォルトの名無しさん
2020/03/11(水) 20:46:52.86ID:M00P+dL8
>>335
同じ変数を使い回しまくって、パフォーマンスを落とさないためやないの?
GCのないPerlならたいしてかわらんやろけど。
338デフォルトの名無しさん
2020/03/11(水) 21:49:34.54ID:gWo/n1eo
>332
ウェブサーバーならbusyboxでよくね?w
数MBのメモリで動作する
339デフォルトの名無しさん
2020/03/11(水) 23:17:22.77ID:k/ve+D91
>>335
クエリ結果を保持してるのはステートメントハンドラオブジェクトの方でパフォーマンス優先のためにその内部変数のリファリンスを返すのが*_arrayrefって考えればいいかな
んでselectrow_arrayrefの第1引数に文字列を渡したときは内部で毎回prepareされるので後から実行しても書き変わらないと
340デフォルトの名無しさん
2020/03/12(木) 01:40:41.53ID:i54BE1kH
>>304
よくもこんな大嘘をw
341デフォルトの名無しさん
2020/03/12(木) 01:44:08.97ID:NTVlQfwP
第一引数に$sth渡せるんだって思ったね
文字列しか渡したことないし
Perlはいまだに知らないことがある
342デフォルトの名無しさん
2020/03/12(木) 09:49:43.58ID:05BordF4
>>339
そうですね。
DBI.pmで第1引数がリファレンス(ステートメントハンドラ)ならそのまま使用、そうでなければprepareしているところまではわかったのですが、その後の流れは同じのようでしたし、Driver.xstまで解析するのはやめておきました(^^;)
343デフォルトの名無しさん
2020/03/12(木) 16:51:12.87ID:XWa7Kkjq
>>340
そういう時は
How dare you?
と言う。
344デフォルトの名無しさん
2020/03/12(木) 16:52:32.93ID:XWa7Kkjq
あ、記号まつがえた。
345デフォルトの名無しさん
2020/03/12(木) 17:18:02.38ID:+5N6GCV3
関連付けの仕組みを知らない人がいるのかな?
単にレジストリに、この拡張子はこのコマンドで実行するって書くだけなんだけど
346デフォルトの名無しさん
2020/03/12(木) 17:18:57.67ID:+5N6GCV3
つまりcmd。exeから実行できるものは全て
同じやり方で関連付け作れるってことね
347デフォルトの名無しさん
2020/03/12(木) 18:12:19.10ID:XQbCK6u3
それはただの起動のしくみでしかない。
実際の動作は高い壁で分離されてるといって過言でないものをいっしょくたにはできまい。
348デフォルトの名無しさん
2020/03/12(木) 18:48:34.51ID:U4j5Oz8o
>>347
理由は?
349デフォルトの名無しさん
2020/03/12(木) 18:49:23.71ID:U4j5Oz8o
そもそもダブルクリックできるなんて
起動の仕組みなんだから、起動の仕組みでしか無いと言われても
その話をしてるんですよとしか言いようがないがw
350デフォルトの名無しさん
2020/03/12(木) 19:40:41.23ID:kpO7RyNn
だからエクスプローラからWSLにあるファイル見る方法教えてくれってw
351デフォルトの名無しさん
2020/03/12(木) 19:47:21.76ID:IWxDU6vM
それは見れる \\wsl$
エクスプローラからしか見れないのが問題
352デフォルトの名無しさん
2020/03/12(木) 19:57:44.60ID:MY0SLzQz
グレタちゃんもアナルパールを使ってます
353デフォルトの名無しさん
2020/03/12(木) 20:49:28.83ID:U4j5Oz8o
ダブルクリックてエクスプローラーの話じゃん
エクスプローラーから見れるなら、ダブルクリックして開ける。
その証拠にテキストファイルだって開けるだろ
354デフォルトの名無しさん
2020/03/12(木) 22:39:56.96ID:MY0SLzQz
グレタちゃんに僕のパイソンを貸してあげたい
355デフォルトの名無しさん
2020/03/14(土) 18:16:47.41ID:jx2yED/o
active perlのcryptのsaltにasciiでない文字を渡すと止まるんだけど何で?
356デフォルトの名無しさん
2020/03/14(土) 19:34:39.97ID:RPa5riWU
WSLつかえ
357デフォルトの名無しさん
2020/03/14(土) 22:58:59.61ID:eh0BX5+5
>>355
理由を聞いてどうするんや?
文字コードとかややこしいから、対応してないんやろ。
358デフォルトの名無しさん
2020/03/14(土) 23:16:24.90ID:5TZ0Uf7y
分からんのなら黙ってろやチンカス
359デフォルトの名無しさん
2020/03/14(土) 23:39:11.11ID:9VuyfYoc
暗号化って、base64 とかだろ。
ascii だけだろ

Ruby なら、こういうやつだろ

module SecureRandom
https://docs.ruby-lang.org/ja/latest/class/SecureRandom.html
360デフォルトの名無しさん
2020/03/14(土) 23:44:18.11ID:jx2yED/o
keyの方は何でもokなんだけどな
361デフォルトの名無しさん
2020/03/15(日) 03:21:52.90ID:ey4TMar/
>>358
わかってもなにもできんくせに
ゴミクズ
362デフォルトの名無しさん
2020/03/15(日) 18:38:42.70ID:8dswEreI
グレタちゃんのクリトリスは100カラットのルビー
363デフォルトの名無しさん
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の仕様に合わせているから、こうなるのではないかと思う。
364デフォルトの名無しさん
2020/03/16(月) 19:53:11.24ID:jMV62GuM
128-255を渡しても止まるんだけどね
エラーが出るとかじゃなくて異常終了する
仕様だとは思い難い
365デフォルトの名無しさん
2020/03/16(月) 20:07:47.98ID:O3TrJAsg
「異常終了」じゃなくて、「die」してるんちゃううんか?
>>363にもそう書いてあるやろ。

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

今?Perlからシェルスクリプトに回帰していますがなにか?
369デフォルトの名無しさん
2020/03/17(火) 05:25:03.15ID:WzQFj8c+
>>368
これ
https://perldoc.jp/func/eval
eval BLOCKってやつ

try catchみたいなもん
370デフォルトの名無しさん
2020/03/17(火) 08:02:58.85ID:sAGmKBfN
エラーが返るならtryできるだろうけど、試してみたら異常終了するようなもんも避けられるのか?
371デフォルトの名無しさん
2020/03/17(火) 21:45:41.98ID:sAGmKBfN
Perlについての質問箱 64箱目 	YouTube動画>8本 ->画像>5枚
evalでもトラップできない
372デフォルトの名無しさん
2020/03/18(水) 00:13:57.91ID:+5qWGdwM
man にはどう書いてあるの? Perl の crypt じゃなくて C のライブラリの方だよ。
373デフォルトの名無しさん
2020/03/18(水) 01:56:55.56ID:jzX09kaS
WindowsだしActivePerlのようだし、何がおきてもふしぎじゃないな。w
374デフォルトの名無しさん
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
375デフォルトの名無しさん
2020/03/18(水) 19:35:06.32ID:iQ6PHWNN
Windows7とか?
376デフォルトの名無しさん
2020/03/28(土) 10:30:07.37ID:gZJzrXqn
検索が遅い
いろんな条件に対してファイル全体を検索、ということをする時に、
OSのキャッシュに頼って毎回 `grep` する方が速い
メモリに読み込んで検索すると負ける
ループで$data[$i] =~ /$pattern/ した方がまだ速くて、
grep {/$pattern/} @data するともっと遅くなる

大量一括検索の高速化のテクニックみたいなの何かあるのかな
377デフォルトの名無しさん
2020/03/28(土) 18:48:22.67ID:Cuxaq7bT
>>376
https://metacpan.org/search?q=grep
使った事ないが MCE::Grep 辺りは説明読む限り速そう
378デフォルトの名無しさん
2020/03/28(土) 18:55:38.49ID:Cuxaq7bT
もっと基本的な話なら perlperf
https://perldoc.jp/docs/perl/perlperf.pod
379デフォルトの名無しさん
2020/03/28(土) 19:23:29.33ID:gZJzrXqn
MCE::GrepはCPUの使用率は上がるけど遅くなった
grepよりは正規表現の処理のあたりが時間かかってるんだと思う

感覚的にはもっと高速でも全然おかしくない感じなのに
380デフォルトの名無しさん
2020/03/28(土) 19:34:33.22ID:gZJzrXqn
100MBのファイルからパターンに合う行を全部抽出するのに1秒かかるくらいの感じ
で、パターンが250もあるから、コーヒーが飲めるくらい待たされる
381デフォルトの名無しさん
2020/03/28(土) 20:00:38.86ID:L8+cmwNy
俺だったらgrepでやっちゃうなぁ
結果はファイル経由で
382デフォルトの名無しさん
2020/03/28(土) 21:36:49.99ID:L89shHGR
>>376
qr//で事前に正規表現をコンパイルしてみたら?
383デフォルトの名無しさん
2020/03/28(土) 21:55:00.53ID:gZJzrXqn
同じパターンで繰り返し検索するのではなくて、
いろんなパターンで同じ対象を検索するので、コンパイルはできない

でも、パターンのリストは実行前に確定しているので、
qrで作ったものを配列に持たせておけば速くなるだろうか
384デフォルトの名無しさん
2020/03/28(土) 23:16:33.34ID:2U8ZKDy+
もはや perl の能力を超えているな
C とかで書いた方がいい
385デフォルトの名無しさん
2020/03/28(土) 23:24:04.96ID:ZQFwrOhU
パターンの内容にもよるが、flex で書いて Inline::C で呼ぶという方法もある。
386デフォルトの名無しさん
2020/03/28(土) 23:25:40.33ID:7nefda3x
色んなパターンで?
grep -f でパターン読ませてやるのと同じか?
387デフォルトの名無しさん
2020/03/29(日) 09:15:52.43ID:9AyQFVoq
素の Perl は NFA だけだから、どうしても速度的には不利になる。
パターンが250もあるなら尚更だ。
grep との差はPerl と C の差はもちろんあるだろうが
DFA でできるパターンなら、その差が大きいと思う。
388デフォルトの名無しさん
2020/03/29(日) 09:42:19.51ID:aacnUCYv
linuxだったら素直にgrep呼べばいいだけだけど、
windowsだと素性が良くて高速なgrepを探すところでまず困難がある
さらに、grepに引数を渡すところにもエスケープ文字の困難があって、
結果の受け取りにも文字コードの困難が
389デフォルトの名無しさん
2020/03/29(日) 17:43:38.29ID:9AyQFVoq
そういえば awk は DFA じゃなかったかな。
390デフォルトの名無しさん
2020/03/30(月) 00:14:28.89ID:mvvN5DTM
perl の Memoize は関数全体に掛けるようですが、
ruby の @memo、javascript の memo の変数に掛けるのは新し目の使い方でしょうか
391デフォルトの名無しさん
2020/03/30(月) 04:32:31.95ID:PdZ6Klrm
>>388
WSLのUbuntuだとどうなのだろうか?
あれ遅い?
392デフォルトの名無しさん
2020/03/30(月) 08:35:14.72ID:3FWyQXw7
NFA でなければならない理由がないなら DFA にするだけで速度 1000 倍は堅いかも。
でも Perl のままでも正規表現のチューニングは可能だ。まだやってないならね。
実際に使ってるパターンを見せてもらわないことにはなんとも言えないが。
393デフォルトの名無しさん
2020/03/31(火) 12:53:45.32ID:GaEXrIp5
>>388
普通にWSLを使えばいいだけでは?
394デフォルトの名無しさん
2020/03/31(火) 22:24:02.97ID:Z+pFaYZ2
win8.1のサポートが終わった頃に思い出したら使ってみよう
395デフォルトの名無しさん
2020/04/22(水) 13:25:13.88ID:gkB+0fgm
@array = ($str =~ /(PAT1).+?(PAT2).+?(PAT3)/g);
みたいにすると、パターン3つ分が配列に入るけど、他にもマッチするとそれも続けて入る
できれば2次元配列になって欲しい
そんな技はある?
396デフォルトの名無しさん
2020/04/22(水) 18:47:25.28ID:WLkEu+yG
そういうことをする時のセオリーはスカラコンテキストで
$str =~ /\G$pat/g
397デフォルトの名無しさん
2020/04/22(水) 19:29:55.51ID:gkB+0fgm
可能?

$str = '1a2b3c1x1d2e3f1g2h3i';
を与えられて
[[a, b, c], [d, e, f], [g, h, i]]
を得るにはどうすれば
398デフォルトの名無しさん
2020/04/22(水) 20:38:21.44ID:f6F85tCk
my @arr = ();
while ($str =~ /\G.+?([a-z]).+?([a-z]).+?([a-z])/g) {
  push @arr, [$1, $2, $3];
}
399デフォルトの名無しさん
2020/04/22(水) 20:54:42.93ID:gkB+0fgm
[[a, b, c], [x, d, e], [f, g, h]]
になっとるよ
400デフォルトの名無しさん
2020/04/22(水) 20:56:31.77ID:gkB+0fgm
でも判った
普通に$1使えばいいだけか
結果を一つずつスカラに取るんだと思ってた
401デフォルトの名無しさん
2020/04/22(水) 21:01:22.02ID:gkB+0fgm
/\G.*?1(.)2(.)3(.)/g
これがやりたかったこと
402デフォルトの名無しさん
2020/04/22(水) 21:27:03.82ID:gkB+0fgm
結局コードはあんまり変わらなくて、ループで
push @array, ($1, $2, $3)
にするか、後で
splice(@elements, 0, 3)
を使っていくかの違い

パターンを3つから4つに増やした時に、
$4を追加するか、3を4に増やすかのメンテはやっぱり必要
いきなり2次元配列が得られるスマートさからは劣る
403デフォルトの名無しさん
2020/04/22(水) 21:30:34.59ID:WLkEu+yG
どうやら今回は必要ないみたいだけど事前にグループの個数が
判らないという前提なら @- とか見ればいい。
あるいはグループに名前を付けて %+ を使えばいい。
全部ここに書いてあるよ。
https://perldoc.jp/pod/perlretut
404デフォルトの名無しさん
2020/04/22(水) 21:32:10.06ID:f6F85tCk
Perlで、とある配列を指定した要素数ごとに別の配列リファレンスに分割する処理をList::MoreUtilsモジュールで書き直してみた
https://perl48.hatenablog.com/entry/2018/08/19/005304
405デフォルトの名無しさん
2020/04/22(水) 23:57:47.29ID:WLkEu+yG
名前を付けるような性格のものじゃなくて個数が変わる可能性があるなら
個数だけ与えてパターンを組み立てればいいよ。
$1,$2 とか書かなくても
map { ${$_}} 1 .. $n
で同じことができるし。
リストコンテキストで配列に入れてから splice する方がいいと思うならそうすればいい。
406デフォルトの名無しさん
2020/04/23(木) 08:13:25.78ID:7CKy0JPC
目指すのは、個数がいくつなのか人間が把握しなくていいコード
407デフォルトの名無しさん
2020/04/23(木) 08:30:38.98ID:IlZrBGCM
できるでしょ。自分がスマートになってスマートなコードを書けばいい。
408デフォルトの名無しさん
2020/04/23(木) 12:10:21.89ID:2vqGx7d4
完全に数値って決まってるんなら、俺ならsplit使っちゃうな
@a = split /\d/, $str;
まあこんな単純な話じゃないんだろうけど
409デフォルトの名無しさん
2020/05/01(金) 10:49:51.92ID:baJ3Dlo6
activeperlで
$res = `exefile $file`;
みたいなことをした時に、
コマンドプロンプトからスクリプトを起動するとちゃんと動く
でも、スクリプトをランチャーから起動するとno such fileになる
ファイル名が英数ならどちらもok
2byte文字が混じると挙動が変わる

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

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

例えば、xx_system('foo.txt') のようにすると、'.txt'に
関連つけられたアプリケーションで、'foo.txt'を開くような
動作を実現したいのですが。
415デフォルトの名無しさん
2020/05/10(日) 21:12:47.84ID:04IHVppx
system(1, 'foo.txt');
416デフォルトの名無しさん
2020/05/10(日) 22:26:25.38ID:gcVsfbhd
>>415
動きました。ありがとうございました。
417デフォルトの名無しさん
2020/05/28(木) 11:01:17.93ID:5kmQgXWn
最近 python を使い始めたんだけど、使うほどに perl 凄げーって思う。
perlって細かいこと気にしないでも書けるって感じ。
まあ、 python に慣れてないってのもあるけどw
418デフォルトの名無しさん
2020/05/28(木) 12:00:57.19ID:yN32+nQR
細かいことを気にしないせいでバグの原因になるので、
きちっとしか書けないようにした

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

Ruby は可読性を上げるために、それらの記号を無くそうとしている
421デフォルトの名無しさん
2020/05/28(木) 13:57:57.17ID:EGYBOXys
>>420
変数の型を知るのに
宣言まで見ないとわからないのがJava
代入まで探さないとわからないのがpython
見るとその場でわかるのがperl
宗教論争は終わらない
422デフォルトの名無しさん
2020/05/28(木) 14:14:16.30ID:yN32+nQR
マウスオーバーで判るようなものをいちいち書かなくても
423デフォルトの名無しさん
2020/05/28(木) 19:40:22.87ID:2jhnUESo
PerlでIDEは使わないわな
424デフォルトの名無しさん
2020/05/28(木) 20:04:53.96ID:EYUPTTzW
んなこたーない
425デフォルトの名無しさん
2020/05/28(木) 20:14:52.80ID:2jhnUESo
いやいやPerl書いてるときマウス触らんでしょ
まあ人によるんだろうが
426デフォルトの名無しさん
2020/05/28(木) 20:21:04.17ID:yN32+nQR
ロジックが逆だ
perlが型が判るからマウスを触らないのではなく、
マウスを触らないで作ったからマウスなしで型が判るようになってる

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

Eclipse とか IntelliJ IDEA のプラグインで使えたとは思ったが、拡張子を .pl にしておかないと Perl だと判別してくれなくて
ただのテキストファイルと認識されちゃって使い辛いなと思ったことはあるが、もっとまともなのある?
428デフォルトの名無しさん
2020/05/29(金) 20:32:29.66ID:uRkXoYhe
vscode + Perl::LanguageServer
429デフォルトの名無しさん
2020/05/29(金) 20:34:34.78ID:Bk25Bwk1
サクラエディタで十分なんですよ(´・ω・`)
430デフォルトの名無しさん
2020/05/29(金) 21:27:39.95ID:dZOo8Hm0
拡張子を ,pl にしないメリットってなんかある?
431デフォルトの名無しさん
2020/05/29(金) 21:28:20.85ID:Bk25Bwk1
実行ファイルはpl
モジュールはpm
そんな事も知らんのか(´・ω・`)
432デフォルトの名無しさん
2020/05/29(金) 21:36:34.81ID:8nIWWcW2
perlはvimで書く。
お兄さんとの約束だよ。
433デフォルトの名無しさん
2020/05/29(金) 21:38:26.77ID:uRkXoYhe
mattnさんはパンツ履いて
434デフォルトの名無しさん
2020/05/29(金) 23:37:14.00ID:GfVaVkMA
>>430
Linuxでは、いちいち拡張子をつけないのがふつう。
中身を気にしなくてよくなる。
435デフォルトの名無しさん
2020/05/30(土) 00:29:42.29ID:UYDx2q8r
>>434
cとかshellとか拡張子をつけるのが普通なんじゃないの?
436デフォルトの名無しさん
2020/05/30(土) 00:31:15.77ID:pcDYqVj5
ソースは付ける
実行ファイルは付けない
スクリプトはソースよりも実行ファイル寄り
437デフォルトの名無しさん
2020/05/30(土) 00:42:58.21ID:h6ZQaP0H
拡張子つければ伝わるであろう情報を削るとか
一人で管理してるサーバならいいけど
そうじゃなきゃ害悪だと思う
438デフォルトの名無しさん
2020/05/30(土) 01:44:27.37ID:UYDx2q8r
人間がエディトするファイルは付ける
人間がエディトしないファイルは付けないんじゃないの?
439デフォルトの名無しさん
2020/05/30(土) 01:51:00.93ID:h49XlInt
運用においては、実行ファイルの実装方法なんかどうでもいい。
むしろ、実装方法を変えたら、ファイル名も変わるほうがはるかに害悪。

たとえば、シェルスクリプトをPerl スクリプトに変えただけで、そのスクリプトを使っているところをすべて変更しないといけなくなる。
440デフォルトの名無しさん
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はそれを実行しようとする(実際に実行できるかどうかは
ファイルの内容による)。
441デフォルトの名無しさん
2020/05/30(土) 08:54:37.07ID:Noe/rV9t
拡張子が無くても判定できるようにすればいいんじゃないの? Emacs みたいに。
442デフォルトの名無しさん
2020/05/30(土) 12:16:10.21ID:h49XlInt
>>441
つ fileコマンド
443デフォルトの名無しさん
2020/05/30(土) 13:18:31.04ID:9sn/rA++
>>439
運用のために保守は犠牲にするんですか?
444デフォルトの名無しさん
2020/05/30(土) 13:58:45.71ID:h49XlInt
>>443
実装の変更は、保守の範囲ではない。
二次開発かな?w
445デフォルトの名無しさん
2020/05/30(土) 15:56:11.11ID:CwCZ2prN
>>440
シェバン知らず?
446デフォルトの名無しさん
2020/05/30(土) 18:54:59.01ID:h49XlInt
>>445
>>440はその前の話やろ。
シェバンがあるだけで、テキストファイルが勝手に起動されたら恐ろしいわ。w
447デフォルトの名無しさん
2020/05/30(土) 19:43:41.34ID:GvMJ9/EG
>>432
おじいちゃん(´・ω・`)
448デフォルトの名無しさん
2020/05/31(日) 02:15:32.98ID:MeZ7svrP
言語変えて作り直すって、俺の感覚ではシステム置き換えのイメージだわ
コンパイル済みのバイナリならともかく、スクリプト言語動かすって環境づくりも入るじゃん
449デフォルトの名無しさん
2020/05/31(日) 02:44:16.68ID:pTVQa+4z
>>445
>>440に書いてあること読んでないだろ。
450デフォルトの名無しさん
2020/05/31(日) 03:40:37.55ID:qe5b9Icc
その前って何?
だからシェバン使えば拡張子なんか使う必要はないってことだよ?
>>439みたいな書き換えはいらないってことを言ってる
あと自演して書き込みは見苦しいぞ
451デフォルトの名無しさん
2020/05/31(日) 04:22:23.87ID:fhA8y4ka
読解力理解力がなくて、複数から指摘されたからって、自演扱いで返すとは見苦しいぞ。
452デフォルトの名無しさん
2020/05/31(日) 05:26:43.75ID:pTVQa+4z
>>450
それ何のOSでの話?
453デフォルトの名無しさん
2020/06/11(木) 19:05:11.82ID:5cioSHJn
「local $| = 1;」と言う記述見たんですけど、
「$|」の局所化って意味あるのでしょうか?
ただ単に「$| = 1;」と等価であり「local」を記述しても無駄な気がするんですけど、
私の勘違いでしょうか?

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

分かるかた教えてください。
454デフォルトの名無しさん
2020/06/11(木) 19:32:41.35ID:zOJFiWlV
>>453
スコープを抜けたときに、もとの値に戻る。
455デフォルトの名無しさん
2020/06/11(木) 19:37:09.97ID:YKNmcAQr
横からだけど知らなかった…
毎回もとの値別変数で退避してた
456デフォルトの名無しさん
2020/06/11(木) 19:53:05.96ID:L2GhQgnz
なんとなく直感的にグローバル変数だけだと思ってた
だから元の値を退避しておくという発想の方が自然
わざわざぶつけて便利に使おうという発想はいずれバグる
457デフォルトの名無しさん
2020/06/11(木) 20:13:03.35ID:5cioSHJn
>>454
レスありがとうございます。

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

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

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

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

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

引き続き>>461-462のベストな解をお待ちしています。
宜しくお願いします。
466461
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の「'' =~ /()/;」ですが、これでは本末転倒です。

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

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

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

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

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

「かも」とか言ってないで、真剣ならまず計測してみろ。
469デフォルトの名無しさん
2020/06/12(金) 05:15:54.75ID:O2sQpJVa
説明してくれたけど、やっぱイマイチ分からん
$1をクリアして無条件でfunc( $1, $ln )を呼び出したい、ということかしら
その時funcは通過するだけ、と
パフォーマンスを気にするならやっぱり $1 && func( $1, $ln )とかの方がいいと思うけどな
多分、何か事情があるのでしょう。
美しくはないけど'' =~ /()/;なら誤差の範疇と思いますよ。
数値としてはベンチマークで
470デフォルトの名無しさん
2020/06/12(金) 05:31:29.45ID:P559B0Rd
$1をやめる選択肢は?

($label) = $ln =~ /^(パターン)://;
func($label, $ln);
471デフォルトの名無しさん
2020/06/12(金) 05:32:22.97ID:P559B0Rd
あ、/ 多い……
472デフォルトの名無しさん
2020/06/12(金) 05:38:56.76ID:O2sQpJVa
答えじゃないんだけどさ、
$x = $ln =~ /^(パターン):/ && $1
これで以降は$xを使う、とか。
473デフォルトの名無しさん
2020/06/12(金) 05:48:44.96ID:P559B0Rd
え、array使わないの?
俺としては

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

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

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

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

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

$ln =~ /^(パターン):|(.*?)/
にすると、「^(パターン):」にマッチしないときに$1を空文字にできる。
480デフォルトの名無しさん
2020/06/12(金) 14:50:38.25ID:uUh54YqY
ただ、(試してはいないが)if文のオーバーヘッドより、
関数呼び出しのオーバーヘッドのほうが大きいと思うけどな。
481デフォルトの名無しさん
2020/06/12(金) 15:40:26.50ID:bpI5hVyH
そこまで速度に気にするならC++とかで書いた方がいい気がするね
482デフォルトの名無しさん
2020/06/17(水) 18:41:04.46ID:TVwLVBUa
そんなデカいデータをよくパールでやるね。
C で書け。
483デフォルトの名無しさん
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分
> 現代における素人にはオススメできない言語 部門より

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

Perl6、Rakuがあるなかで、Perl5と言われたら古いとかEOLとかの疑いを持たれかねんから。
それに、必要であれば非互換も?
486デフォルトの名無しさん
2020/06/28(日) 18:17:09.91ID:UG2zXSFM
お型付けできるようになったら嬉しいな
487デフォルトの名無しさん
2020/06/28(日) 19:55:20.21ID:DGGKS5Fb
ついに後方互換捨てるのか!
488デフォルトの名無しさん
2020/07/02(木) 21:44:39.67ID:wuNvV9ki
デフォルトの状態が変わるだけで
適宜オプションつければ後方互換も保てるらしいよ
Perlのこういうところ好きだわ
489デフォルトの名無しさん
2020/07/04(土) 13:31:08.07ID:yrmljXci
今のところは、な・・・
490デフォルトの名無しさん
2020/07/04(土) 18:51:36.50ID:25OQuAeP
Perl7は進化を求める
この10年で完全にオワコン言語になってしまった
491デフォルトの名無しさん
2020/07/04(土) 19:41:56.61ID:+vSKr8nf
効率化して高速化しようとしても、過去に足を引っ張られる
492デフォルトの名無しさん
2020/07/04(土) 19:48:46.40ID:VctW6lO7
単純に過去を切り捨てたら、Rakuの二の舞になる。過去を切り捨てるのであれば、
Python に勝てる程度の言語仕様にしなければ、見向きもされないだろう。
しかし、それはもう既にPerlではないだろう。
493デフォルトの名無しさん
2020/07/04(土) 20:01:08.35ID:XHKaM396
Perlはこのままでいいと思う
レガシーなのがPerlの強さ
494デフォルトの名無しさん
2020/07/04(土) 20:55:27.14ID:+vSKr8nf
negative legacy
495デフォルトの名無しさん
2020/07/05(日) 01:06:23.02ID:BkxIDrcL
>>492
はい。
Wiki>「Perlに続く」という意味で、6月の次の誕生石(7月)のルビーから名付けられた
496デフォルトの名無しさん
2020/07/06(月) 00:05:12.58ID:Dee8Pqdl
逆に頑張って作ったPerl6が古いみたいな感じになっちゃうな(´・ω・`)
497デフォルトの名無しさん
2020/07/06(月) 02:55:32.01ID:pEZsiPGN
もうPerl6は存在しないからだいじょうぶ。
498デフォルトの名無しさん
2020/07/06(月) 03:53:08.41ID:Lg+fAiJM
Perl6はさっさと開発中止すべきだったのになぜ続行したんだろう
499デフォルトの名無しさん
2020/07/06(月) 19:42:39.82ID:5vDJxItj
ま、いいじゃねえか。新しい言語が一つ増えたようなもんだし。
500デフォルトの名無しさん
2020/07/06(月) 21:20:03.77ID:pEZsiPGN
>>498
「すべき」って、おまえは何様なんや?

やりたい人がやってただけ。
結果としてうまくいかなかっただけ。
501デフォルトの名無しさん
2020/07/07(火) 18:34:24.36ID:e1WbjzO/
うまくいくべき
502デフォルトの名無しさん
2020/07/07(火) 18:40:58.31ID:/oL+BKEU
べきであるある
503デフォルトの名無しさん
2020/07/07(火) 18:42:17.26ID:v8PkKQM3
>>500
何様ってw
匿名掲示板で何を言ってるのw
強いていうならPerlユーザーですw
504デフォルトの名無しさん
2020/07/07(火) 19:01:21.20ID:e1WbjzO/
俺様
505デフォルトの名無しさん
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スクリプトでお願いします
506デフォルトの名無しさん
2020/07/23(木) 06:45:22.79ID:6LXR6fOg
binmodeで開いて、substr
507デフォルトの名無しさん
2020/07/23(木) 19:03:52.69ID:2kWEZYuR
>>506
ありがとう
素人過ぎてわかんないけど
508デフォルトの名無しさん
2020/07/23(木) 19:09:07.35ID:NaEhWCW1
コードそのものを書いてくれとさ
509デフォルトの名無しさん
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;
510デフォルトの名無しさん
2020/07/24(金) 04:55:58.03ID:6ZonvnML
そうそう。そんな感じ。
まあ頑張って。
511デフォルトの名無しさん
2020/07/24(金) 09:07:49.48ID:So4dssPK
書き換える番地は、N は、0 以上で、以下の法則か?
0x8000 × N + ( 0x80 + 0x1C )

つまり、ヘッダは必ず、0x8000 毎にあるのか?
512デフォルトの名無しさん
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 に修正。
513デフォルトの名無しさん
2020/07/24(金) 11:37:31.23ID:nuOKXnku
オレなら、バイナリーエディタの置換機能を使うと思うが。
514デフォルトの名無しさん
2020/07/24(金) 11:40:12.29ID:61Z/1/Bp
数が多いとツール作った方が早い
手動でやってもツール作っても時間同じなら、ツール作った方がいい
仕事では、ツール作ったせいで余計に時間かかってもツール作る
515デフォルトの名無しさん
2020/07/24(金) 11:53:07.60ID:JRbdBOQM
>>513
データが大きいのでLinuxのバイナリエディタでは上手く行かないのです
516デフォルトの名無しさん
2020/07/24(金) 12:54:55.96ID:JRbdBOQM
Perlについての質問箱 64箱目 	YouTube動画>8本 ->画像>5枚

この文字列が一定間隔で現れます
データが大きいので>>514さんの言うとおりツール(スクリプト)で処理したいのです
517デフォルトの名無しさん
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
これが最短?
518デフォルトの名無しさん
2020/07/24(金) 15:58:32.23ID:JRbdBOQM
>>517
レスありがとうございます
泣きそうです(解らなすぎて)

>>509のスクリプトはバイナリ修正したコピーファイルを作成するものでした
小さなファイルなので問題ないのですが、目的の対象ファイルは10GB~20GBもあるものなのでマネ出来ません
519デフォルトの名無しさん
2020/07/24(金) 16:06:11.64ID:JRbdBOQM
>>509の全文です

Perlについての質問箱 64箱目 	YouTube動画>8本 ->画像>5枚

後出しのクセが強すぎすいません
520デフォルトの名無しさん
2020/07/24(金) 16:07:20.05ID:UzZpGBU/
>>515
なるほどね。しかし、perlが扱えるデータ量にも、よく解らない限界があって、
巨大なデータを突っ込むと勝手に途中で切られたりするみたいだよ。
巨大なデータを扱うなら、seek関数みたいな低水準な手法を使う必要があるかもしれない。
521デフォルトの名無しさん
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 }'
522デフォルトの名無しさん
2020/07/24(金) 17:06:33.72ID:61Z/1/Bp
別に短く書くコンテストではない
523デフォルトの名無しさん
2020/07/24(金) 17:06:42.97ID:JRbdBOQM
>>521
ありがとうございます
Fはファイル名でよろしいでしょうか?(素人でごめんなさい)

Can't find string terminator "'" anywhere before EOF at -e line 1.
となります
524デフォルトの名無しさん
2020/07/24(金) 17:29:22.03ID:JRbdBOQM
サンプルです
https://www.dropbox.com/s/zjhagi19dx0akbv/HR_STR01.SRO?dl=0

もしよろしければ暇つぶしに、ご指南いただけませんか?
(もう、いただいてますけど)
525デフォルトの名無しさん
2020/07/24(金) 17:49:05.64ID:JRbdBOQM
よく考えたらダメだったw
526デフォルトの名無しさん
2020/07/24(金) 19:45:46.20ID:lCl1FARv
GBレベルのファイルがオンメモリで処理できるわけないだろ。w
527デフォルトの名無しさん
2020/07/24(金) 20:07:01.97ID:iJ+2fZSI
メモリが1TBあればヘーキヘーキ
528デフォルトの名無しさん
2020/07/24(金) 20:38:39.07ID:So4dssPK
Stream 処理なら、バッファサイズ分のデータを、読んでは捨ててを繰り返すから、
必要なメモリサイズは、バッファサイズ分だけ

それか、seek みたいに、その番地をシークして、そこだけ書き換える
529511
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個もあるの?

データ部分は固定サイズなの?
変動サイズで、そのサイズがヘッダ内に記録されているとかじゃないの?
530デフォルトの名無しさん
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 にするかな
531511
2020/07/24(金) 22:51:07.42ID:So4dssPK
くれぐれも、データのバックアップを取っておいてから、実験しろよ。
もし、プログラムが間違っていたら、回復できないから

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

https://docstore.mik.ua/orelly/perl/cookbook/ch08_14.htm
533532
2020/07/24(金) 23:36:19.14ID:Z8MDOpZc
>>530 と内容が被った…orz
534532
2020/07/24(金) 23:40:56.85ID:Z8MDOpZc
この辺調べてやってくだされぃ
https://www.google.co.jp/search?q=perl+binary+file+update+open+seek+unpack
535532
2020/07/24(金) 23:45:28.89ID:Z8MDOpZc
先生ッ、便利そうなモジュール見つけました!
https://metacpan.org/pod/File::Binary
536デフォルトの名無しさん
2020/07/24(金) 23:46:10.28ID:JRbdBOQM
>>530
検証に時間がかかってしまって返信遅くなりました
できました!! ありがとうございました!

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

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

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

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

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

>>530のコマンドラインに絡めるかスクリプトにしていただけると卒倒するほど喜びます
これを機会にperlを勉強したいと(心から)思いますが、今の段階ではこんな図々しいお願いをするしか出来ません
540デフォルトの名無しさん
2020/07/25(土) 02:26:21.46ID:GJL3/5bG
もうええやろ?
541デフォルトの名無しさん
2020/07/26(日) 01:36:51.87ID:5SabrGL+
>>539
死ねよ
542デフォルトの名無しさん
2020/07/26(日) 02:35:47.46ID:T0U3lDAz
勉強する気はなしか
やれやれ
543デフォルトの名無しさん
2020/07/26(日) 08:04:49.79ID:faz+YmuJ
進捗表示は、計算自体は簡単だけど、ちゃんと見えるように表示するのが
ちょっと面倒なんだよな
544デフォルトの名無しさん
2020/07/26(日) 10:44:31.12ID:KWzmTFSY
好きなのを使えばいいよ。
https://metacpan.org/search?q=progress+bar
545デフォルトの名無しさん
2020/07/26(日) 11:13:19.32ID:faz+YmuJ
そんなもんがいちいちあるのか
まあ、凝ったことをするなら共通化はするだろうけど
凝ったことしなくても、どういう頻度で表示するかとかの調整は必要で、
UI特有の機能と関係ない面倒臭さの部分なんだよな
546デフォルトの名無しさん
2020/07/26(日) 13:26:52.37ID:y3z4IjvW
ターミナルの機能を使いきるなら面倒だろうけど、ただ垂れ流すだけなら簡単やろ。
547デフォルトの名無しさん
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;
}
548デフォルトの名無しさん
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 }
549デフォルトの名無しさん
2020/07/27(月) 01:28:37.03ID:KvYX/iYh
>>548
いい加減にしろ
550デフォルトの名無しさん
2020/07/27(月) 07:32:32.55ID:X6EMHfht
readして変更しないところまでprintするのは無駄なのに
無駄を省けば進捗表示がいらないくらい高速化するだろうに
551デフォルトの名無しさん
2020/07/27(月) 09:23:37.46ID:HYhflFVx
コピーを作っておいて、そのコピーの一部だけ変更して書き戻せば一瞬
信頼性が上がったら、コピーは作らずにオリジナルを変更する
552デフォルトの名無しさん
2020/07/27(月) 10:25:37.74ID:URSuW3yQ
>>550
ファイルサイズがGBレベルなら、そんなに速くはならんやろ。
553デフォルトの名無しさん
2020/07/27(月) 17:35:52.14ID:X6EMHfht
ていうか >>548>>530 を参考にしてるのになんで遅い方を使ってるんだ
554デフォルトの名無しさん
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では認識できないのです
555デフォルトの名無しさん
2020/07/27(月) 19:14:13.61ID:KvYX/iYh
DRM解除の片棒担ぐ人達かね
556デフォルトの名無しさん
2020/07/27(月) 19:33:35.94ID:HYhflFVx
なんて大層なDRMだ
557デフォルトの名無しさん
2020/07/27(月) 19:46:48.42ID:Y15FmTu1
残念ながら暗号化解除まではされないんです
別の機器にコピーしようとしても「コピープロテクトがなんちゃら。。」と、ちゃんとハネられます
機器内の制限を緩くするためのオフホワイトな作業です
558デフォルトの名無しさん
2020/07/27(月) 20:24:22.40ID:2I3xUck9
頭悪くてプログラムしかできなかった大企業CEO一覧
http://re-file.com/18k/1677/
559デフォルトの名無しさん
2020/07/27(月) 22:09:54.28ID:P2Gsimd7
研究目的なら、犯罪の意思がないから、無罪だろ
560デフォルトの名無しさん
2020/07/27(月) 23:21:16.44ID:Z4OWIfz1
>>559
理由は関係ないはず
秘匿目的で暗号化されているものを解読することそのものが犯罪
561デフォルトの名無しさん
2020/07/27(月) 23:23:00.46ID:Dzov2n68
>>560
そんな事みんな知ってるよ
562デフォルトの名無しさん
2020/07/27(月) 23:33:36.72ID:Dzov2n68
法律に詳しいオレってカッコいいだろう?
563デフォルトの名無しさん
2020/07/28(火) 00:29:51.31ID:cSYuj1Eq
>>557
お前は裁判になって負けたら責任全部背負うのか?
564デフォルトの名無しさん
2020/07/28(火) 01:16:10.36ID:YHRj/bUX
責任w
565デフォルトの名無しさん
2020/07/28(火) 01:21:05.81ID:YHRj/bUX
暗号化解除してないので責任wないですぅ プ
566デフォルトの名無しさん
2020/07/28(火) 01:36:31.30ID:Jzf+DoQ+
自称”法律専門家”の底辺ニート達が不毛な議論を展開すると予想
567デフォルトの名無しさん
2020/07/28(火) 01:48:48.45ID:R7vB/BT5
コピー許可するフラグをいじるのは私的利用の範囲なら自由じゃないですか?
ここでその方法を聞いたりその答えを書いたりした人がどうなるかはわかりませんが
568デフォルトの名無しさん
2020/07/28(火) 02:17:19.93ID:F+mRlQPD
>>567
他人が使うためにプログラムを公開することに問題がないとでも?
569デフォルトの名無しさん
2020/07/28(火) 02:23:12.72ID:p8KDyqHY
Winnyの作者は捕まるが利用者は捕まらない
包丁の販売は捕まらないか利用者は捕まる事が有る
YouTubeであるけど包丁を自作して販売したら捕まるのか?
570デフォルトの名無しさん
2020/07/28(火) 02:35:26.47ID:R7vB/BT5
>>568
コピー許可フラグを取り除くプログラムを公開することは問題ありと見ているわけですね
確かに東芝の全機種に対して動作可能であるなら影響は大きそうです
571デフォルトの名無しさん
2020/07/28(火) 05:40:11.08ID:U3aN9PuQ
おかしな雲行きになってきたので説明(釈明)を

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

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

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

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

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

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

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

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

>>574
頑張って
576デフォルトの名無しさん
2020/07/28(火) 07:08:12.80ID:Z44sycP1
パソコンはコマンドが基本だからな。
コマンド出来るようになれよ。
577デフォルトの名無しさん
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毎に書く時に読むだろうからこんなもんか
578デフォルトの名無しさん
2020/07/28(火) 13:31:46.55ID:DVrEteyf
>>571
あんた誰?
579デフォルトの名無しさん
2020/07/28(火) 14:31:17.47ID:U3aN9PuQ
>>578
あんたは誰?
先に名乗って マヌケ
580デフォルトの名無しさん
2020/07/28(火) 15:14:32.97ID:DVrEteyf
ひみちゅ
581デフォルトの名無しさん
2020/07/28(火) 16:12:16.22ID:7IzxJUwl
>>580
なんかこの人好きやわ笑笑
582デフォルトの名無しさん
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
583デフォルトの名無しさん
2020/07/28(火) 21:18:54.63ID:LCUSVvjE
>>582
死ね、クズ
584デフォルトの名無しさん
2020/07/28(火) 21:42:15.96ID:7IzxJUwl
>>583
ネットでの暴言はインキャがすること。
てめぇはこうなれ!!!
http://re-file.com/18k/1669/ (結構グロ)
585デフォルトの名無しさん
2020/07/28(火) 21:51:29.80ID:rf/YfV6w
殺したいほど嫌悪するような事か?
おそらく心の病気だから早く病院行った方がいい
586デフォルトの名無しさん
2020/07/28(火) 22:01:24.31ID:7IzxJUwl
>>585
あの〜傍観者なのですが、これって584と583
どっちに言ってるんですか??
587デフォルトの名無しさん
2020/07/28(火) 22:22:07.89ID:Jbl72Gtp
もっと争え
588デフォルトの名無しさん
2020/07/28(火) 22:27:18.25ID:7IzxJUwl
ネットはこうでなくちゃ!明日の学校めんどいけど、この争いみたら
楽になれる!
589デフォルトの名無しさん
2020/07/28(火) 23:07:09.57ID:rf/YfV6w
なぁお前らってホントにコード書けるの?
何でここにいるの?
590デフォルトの名無しさん
2020/07/28(火) 23:26:37.15ID:rf/YfV6w
明日の学校とか五十過ぎのオッサンが恥ずかしくないのか?
591デフォルトの名無しさん
2020/07/28(火) 23:54:00.05ID:7IzxJUwl
>>590
福岡県福岡市東区在住
西南学院中学二年〇組テニス部
学力推移調査:225/223位
全教研赤坂本校筑女,西南合同vクラス
明日の時間割英会話.社会.聖書.体育
(保護者面談なので4限授業)
頭は悪いがプログラムができるのでマークザッカーバーグ
のように校内snsをつくって流行らせようとしてます笑笑。
昨日、無断で水曜日に部活休んだのでめちゃくちゃ怒鳴られました。
明日の聖書は、「手紙」というくだらない日本映画を見ます。
今日は一時から「爆笑問題カウボーイ」というラジオがあるので、
monsterのんでずっと起きてます。2年になって運が悪いことに親しかった
友達は2組と五組に分かれてしまい、僕だけ〇組という
辺境の地に飛ばされました笑笑。好きなアーティストは「ずっと真夜中でいいのに」
という顔出ししていないバンドです。さっき5chのずとまよ専用スレで顔写真をみて、
とても美人だったので今すごくうれしいです。好きなサイトは、「リファイル」というグロサイトです。
「西南学院中学2年という名前でコメント投稿してるので、グッドボタン押して下さい。
592デフォルトの名無しさん
2020/07/28(火) 23:55:04.17ID:V3SVLGoH
>>590
学校の先生かも知れんよ
593デフォルトの名無しさん
2020/07/28(火) 23:59:10.33ID:7IzxJUwl
ほんとに信じてくれ!
594デフォルトの名無しさん
2020/07/29(水) 00:00:07.74ID:hFsck1GX
>>592
全然信じてくれんやん笑笑
595デフォルトの名無しさん
2020/07/29(水) 00:01:21.85ID:hFsck1GX
>>591
というか、こんなにネットにさらすのはやばかったかな?
596デフォルトの名無しさん
2020/07/29(水) 00:05:34.09ID:hFsck1GX
>>590
逆に聞きますが、あなた五十過ぎのオッサン
何ですか?( ´∀` )
597デフォルトの名無しさん
2020/07/29(水) 00:11:56.16ID:g1h81RwA
>>593
リアル厨房なら、perlなんかやめたほうがいいね。
python のほうがずっと言語仕様が綺麗で、複雑な処理も簡単にこなせる。
今、perlを使っているのはな、20年前からperlを使ってて、
他の言語に乗り換える気力も失ったオッサンばっかりだよ。
598デフォルトの名無しさん
2020/07/29(水) 00:13:37.08ID:CwVjY0Ri
蛇より真珠のがキレイだ
599532
2020/07/29(水) 00:13:51.84ID:gNILtmsT
python, goなど他の言語もやってますが
600デフォルトの名無しさん
2020/07/29(水) 00:19:14.22ID:hFsck1GX
>>597
最近はperlよりphpに力を入れてます
601デフォルトの名無しさん
2020/07/29(水) 02:50:53.58ID:ZD2Ud5DP
>>597
互換性重視ならPerlしか。
Rubyはとんでもないし、Pythonもあやしい。
602デフォルトの名無しさん
2020/07/29(水) 02:59:07.17ID:TsNd4noZ
Kotlinもよろしく
603デフォルトの名無しさん
2020/07/29(水) 07:08:18.48ID:q44g7qzE
問題
----
$flags に格納されているフラグ 0x40 をリセットして 0x00 にする
次の3通りの処理から採用する方法を理由を添えて答えなさい

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

もし、チェックサムがあれば、エラーになるはずだけど
605デフォルトの名無しさん
2020/07/29(水) 15:15:31.23ID:opF1rrDZ
>>597
個人的にはサーバプログラムはgo
時点でpythonかな
perlはlinuxなら環境を選ばないという点で、シェルスクリプトはperl一択
それぞれに良さがある
606デフォルトの名無しさん
2020/07/31(金) 06:23:48.86ID:uvjudIRN
>>603
a, b は他のビットが0になっても良い場合、及びbは他のビットが0の場合に動く。
cは
あ、ちょっと今書いてる時間ない。誰か他の人よろしく。
607デフォルトの名無しさん
2020/08/02(日) 05:05:52.61ID:IlYSPDQE
Cは他のビットを崩さずに 0x40 の所のビット(2進だと01000000)だけ0にする。
608デフォルトの名無しさん
2020/08/02(日) 07:04:07.45ID:MjfLntA9
何を 0x00 にするのか不明確な時点で出題者の頭が悪い。
a を意図しているなら 0x40 は関係ないし
b を意図しているなら「0x40 をリセットして」ではなく「0x40 がセットされていれば」と
書かれていなければならない。
ひょっとして、元の値が 0 だったらリセットしたことにはならないということか?
c を意図しているなら他のビットが全部 0 の場合に限り「$flags の値を 0x00 にする」
ことになるだろうが、そのようには書かれていない。
$flags & 0x40 を 0 にするということなら、 0x00 と表記するのは
値としては同じでも適切な表記なのか疑問が残る。
しかしこれが最も無理のない解釈だろう。
こんなに忖度させるようでは出題者は落第だ。
609デフォルトの名無しさん
2020/08/02(日) 07:43:03.21ID:muADJDro
うわあ恥ずかしいやつが来ちゃった
>>603>>505 からの流れがあって出された問なのに・・・
610デフォルトの名無しさん
2020/08/02(日) 09:49:24.57ID:LgIKwsTf
pythonいいけどちゃんと書かないとすぐバグるから気をつけてな
611デフォルトの名無しさん
2020/08/02(日) 10:05:23.75ID:Vanmrtqf
perlもちゃんと書かないとバグるぞ
612デフォルトの名無しさん
2020/08/02(日) 12:33:21.72ID:uvJ0AhRU
ちゃんと書かないで
バグらない言語ってあるのか?
613デフォルトの名無しさん
2020/08/02(日) 12:40:43.04ID:L8TYFRoG
水掛け論でしょ 言語仕様を理解しないで適当に書いてちゃんと動くかどうかの話
614デフォルトの名無しさん
2020/08/02(日) 12:45:33.70ID:Vanmrtqf
仕様からコードを自動生成すればバグらない
仕様はちゃんとしか書けないものとする
615デフォルトの名無しさん
2020/08/02(日) 15:01:47.55ID:4gDW5awL
>>608
>>505をよろしくお願いします
美しいスクリプトを期待
616デフォルトの名無しさん
2020/08/02(日) 16:23:15.21ID:qo03Ruan
また釣りのクズか
617デフォルトの名無しさん
2020/08/02(日) 17:01:54.34ID:4gDW5awL
病気の人か
5ちゃんねるで悪態つくだけの惨めでみっともない人生
618デフォルトの名無しさん
2020/08/02(日) 17:05:00.79ID:4gDW5awL
>>616
>>505をよろしくお願いします
期待していい?
619デフォルトの名無しさん
2020/08/02(日) 18:07:45.30ID:JnzrulEq
>>617
死ね
620デフォルトの名無しさん
2020/08/02(日) 18:54:17.87ID:4gDW5awL
効いたな
621デフォルトの名無しさん
2020/08/02(日) 19:26:37.18ID:TAOBMMvc
>>614
数万人の天才が挑戦しているがいまだに達成していない
622デフォルトの名無しさん
2020/08/02(日) 19:41:56.53ID:hIQzyyzC
>>621
むしろ天才よりも秀才のほうやろ。
本当の天才はそういうことに関わらん気がする。
直感的に不可能か、現実的に意味がないかを悟っていそうというか。
623デフォルトの名無しさん
2020/08/02(日) 20:29:18.39ID:Vanmrtqf
バグの無いことの証明が不可能なのは、
ゲーデルの不完全性定理とかあのへんまで突っ込んでいくからであって、
99.9%okなら良しとする現実世界なら普通に可能
624デフォルトの名無しさん
2020/08/03(月) 23:11:06.80ID:/fZxIKnK
>>623
そしてその0.1%が理由になって戦争になるわけですね
625デフォルトの名無しさん
2020/08/09(日) 01:00:36.25ID:JDEJdFnx
過疎ってると落ち着く
626デフォルトの名無しさん
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です
627デフォルトの名無しさん
2020/08/13(木) 16:19:08.99ID:HLH3bdVq
その出力先(ターミナル?コンソール?)は、そもそもシフトJISテキストを表示できるのか?
できない場合は、プログラムは関係なく、ターミナルが文字化けする。

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

try:
  str_sjis = str.encode("CP932")
except UnicodeEncodeError:
  print str.encode("utf-8")
629デフォルトの名無しさん
2020/08/13(木) 16:48:34.24ID:/BJ4BGZD
>>628
そのレベルならPerlでも簡単
絵文字だけ抜き出してHTML特殊文字化 でしょ
630デフォルトの名無しさん
2020/08/13(木) 17:00:11.25ID:g8OxF1lY
>>627
ターミナルです
ファイルに出力してそれをShift-JISとして開いたら文字化けもなく見ることができました
内部的には問題なかったのですね
ありがとうございました
631デフォルトの名無しさん
2020/08/13(木) 22:25:11.59ID:L5UfXSE8
>>628
笑わすんじゃねーw
632デフォルトの名無しさん
2020/08/15(土) 08:35:13.06ID:ACgG3ouC
プロトタイプ属性の指定がどうやってもできん

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

これで構文エラーになる理由が全く分からん
633デフォルトの名無しさん
2020/08/15(土) 10:52:43.99ID:N6F3nDZU
釣れますか?
634デフォルトの名無しさん
2020/08/15(土) 12:09:58.58ID:ybTBju6n
同時には使えんやろ
635デフォルトの名無しさん
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

構文こうなってるけど?
636デフォルトの名無しさん
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つの変数に代入したいのですが、方法はあるでしょうか?
637デフォルトの名無しさん
2020/08/15(土) 16:19:42.08ID:V1MJgzDn
そら一発では無理だろう
一旦配列に入れてから真ん中で分ける
638デフォルトの名無しさん
2020/08/15(土) 16:34:06.12ID:o+i8zw5r
釣りに引っ掛かるな
639デフォルトの名無しさん
2020/08/15(土) 17:04:09.01ID:gFfdk9Ij
>>636
はい。あります。
640デフォルトの名無しさん
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;
}
641デフォルトの名無しさん
2020/08/15(土) 19:55:02.56ID:dQrORRCv
2行目間違えてた。
while ($str =~ s{^[\s\S]*?<p>(.+?)</p>(.*)<p>(.+?)</p>[\s\S]*?$}{$2}){
642デフォルトの名無しさん
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]);
643デフォルトの名無しさん
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]);
644デフォルトの名無しさん
2020/08/15(土) 20:11:32.28ID:UM/CpThf
俺のは巨大なHTMLだとメモリが死ぬ
安全策なら>>640
645デフォルトの名無しさん
2020/08/15(土) 20:49:31.50ID:ODJGcA2C
>>644
まあ、そんなに巨大だったら、どっちにしろ死ぬやろけどな。w
本気で心配するならチビチビつままないと。
646デフォルトの名無しさん
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>"
647デフォルトの名無しさん
2020/08/16(日) 06:28:33.83ID:Rc5RuLFB
Mechanizeでやれる?
648646
2020/08/16(日) 07:20:54.63ID:Degs0Zl8
Mechanize とか、curl + Nokogiri でも、静的なページなら、DOM を取得できるけど、

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

5ch などは、空のHTMLを送ってきてから、
Ajax で、ページの内容を取得しているから、
HTMLをスクレイピングするだけでは、タイミングによっては内容が存在しない
649646
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))
650デフォルトの名無しさん
2020/08/16(日) 07:29:48.83ID:Rc5RuLFB
プロテクトのつもりは無いんだろうけど、機械にやさしくない
最近だとメルカリのページ取得して、なんで空? と思った
651646
2020/08/16(日) 09:02:04.52ID:Degs0Zl8
Selenium WebDriver なら、指定した要素が出現するまで、指定した時間だけ待ってくれる

漏れは、10〜20秒ぐらいを指定してる
652デフォルトの名無しさん
2020/08/16(日) 09:19:07.80ID:Rc5RuLFB
webであれこれしたいなら、javaが近道なのは自明だな
653デフォルトの名無しさん
2020/08/16(日) 13:18:51.97ID:YKxJCnVG
Javaは、なにをするにしても遠回りやろ。w
654デフォルトの名無しさん
2020/08/16(日) 14:20:54.02ID:bYLilpPQ
逆にPerlできないことってなんだ?
ライブラリは揃ってるものとして
655デフォルトの名無しさん
2020/08/16(日) 15:22:58.74ID:9u3LM4y1
あんまりない
弱いのはライブラリ面なので言語的に不足してる機能はそれほどない
656デフォルトの名無しさん
2020/08/16(日) 16:02:30.33ID:0524gJdA
CPANを探してなかったという経験がないしな
657デフォルトの名無しさん
2020/08/16(日) 18:58:24.31ID:5UHvUqAR
なら、C++があれば他の言語は要らなくなる。
さらに極言すれば、アセンブラがあれば他の言語は要らなくなる。
658デフォルトの名無しさん
2020/08/16(日) 19:02:50.27ID:YKxJCnVG
GUIは弱い。
まあ強いと言っていいのはC#くらいだから、しゃあない?
659636
2020/08/16(日) 20:53:31.17ID:we+09hKc
返信が遅くなってすいません
>>640,643,646
勉強になりました
ありがとうございました
660デフォルトの名無しさん
2020/08/17(月) 01:24:18.13ID:U9ZmQUIp
GUI必要なツールはC#使うけど、CUIだけとか引数もなくて単に実行するだけとかそういうのだいたい全部Perlで書いてる
661デフォルトの名無しさん
2020/08/17(月) 07:07:29.41ID:lN4Qioc8
GUIって結局、裾野の方々でも使えるようにする工夫であって、
テキストエディタで条件設定した方がよっぽど効率いい場合が殆どなのでは

自分専用ツールでGUIで作った記憶がない
662デフォルトの名無しさん
2020/08/17(月) 07:25:27.72ID:KZ//oCQL
>>661
スマホのアプリはテキストエディタを使うのが主流か?
663デフォルトの名無しさん
2020/08/17(月) 07:41:47.99ID:lN4Qioc8
スマホのは作ったことすらないけど、
CUIなんて選択肢がそもそもあるのか?
664デフォルトの名無しさん
2020/08/17(月) 10:16:26.85ID:MSHB+00t
>>661
だからなに?
ああそう、とかいってほしいの?
665デフォルトの名無しさん
2020/08/17(月) 11:54:02.58ID:p+skW/fD
PerlでスマホのGUI作れるんですか?
666デフォルトの名無しさん
2020/08/17(月) 12:04:54.68ID:OdJd9Pxh
GUIが必要ないものはPerlでって話でしょ
これに噛み付いた>>661が意味不明
667デフォルトの名無しさん
2020/08/17(月) 12:18:14.46ID:lN4Qioc8
噛みつかれた、と思っちゃうのが糖質なんだよな
書き込みがみんな攻撃に見えるっていう
668デフォルトの名無しさん
2020/08/17(月) 12:19:54.46ID:p+skW/fD
>>653
だってJavaとPerlでスマホのGUIを比べるのがどうかしてる
669デフォルトの名無しさん
2020/08/17(月) 14:26:41.31ID:MSHB+00t
>>667
わけがわからなすぎるからな。
攻撃に見えてもしゃあない。

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

で、本人はどういうつもりなの?
670デフォルトの名無しさん
2020/08/17(月) 15:10:53.35ID:Y3iw4HO/
http://hissi.org/read.php/tech/20200817/TVNIQiswMHQ.html

>>669は聞きたい事が多い
671デフォルトの名無しさん
2020/08/17(月) 17:15:38.44ID:fOsr3uhu
そうだねでいいんでね おれもそう思う
GUIがあった方がいいなって時はつければいいし
672デフォルトの名無しさん
2020/08/17(月) 18:21:33.00ID:2KNIyB/f
あー。PerlでスマホのGUIか。書けたらいいな。
ていうか世界は広いからとっくの昔に誰かが作ってそう。
673デフォルトの名無しさん
2020/08/17(月) 22:59:27.97ID:6nkEOrou
その昔はGUIといえばperlだったんだけどな
674デフォルトの名無しさん
2020/08/18(火) 01:35:21.75ID:IZwRntbA
Perl(パール)[Pathological Eclectic Rubbish Lister]
Google翻訳[病理学的折衷的なゴミリスター]

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

オレはPerlではTk, Tkxしかやったこと無いけどさ
676デフォルトの名無しさん
2020/08/18(火) 02:46:33.41ID:TScP2Zja
GUI必要がなら普通にWebアプリでいいと思う
677デフォルトの名無しさん
2020/08/18(火) 03:58:15.17ID:R/jmWoBG
>>674
ラクダ本にそう書いてなかったっけ?
678デフォルトの名無しさん
2020/08/18(火) 04:26:54.25ID:G86KA+uV
>>677
「病理的に異常な妥協を寄せ集めたゴミくずリストを作るものです」と?
679デフォルトの名無しさん
2020/08/18(火) 06:36:49.23ID:bsH9de+P
処理が終わったらwindowsにポップアップを出すくらいでいいわ
680デフォルトの名無しさん
2020/08/18(火) 12:11:19.03ID:1vCwIsCs
>>676
同感
適材適所
Perlは高度なバッチ処理が適所だと思う
681デフォルトの名無しさん
2020/08/18(火) 22:52:59.68ID:MJ+frvDl
>>673
馬鹿?それとも釣り?
682デフォルトの名無しさん
2020/08/18(火) 23:26:43.99ID:yJqh7w6C
>>681
perl/tk をご存じないのか?
683デフォルトの名無しさん
2020/08/18(火) 23:33:31.65ID:bsH9de+P
やれるというのと、それを目標に人が集まってくるのは別

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

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

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

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

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

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

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

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

a.「木なんてみな同じ」
b.「理想を追い求める自分に酔ってた」
c.「Windows入れ直せ」
722デフォルトの名無しさん
2020/09/04(金) 15:55:39.64ID:2zp4/GYN
× 木こり
○ 林業従事者
723デフォルトの名無しさん
2020/09/04(金) 15:58:22.63ID:i1o0tLie
Strawberry Perl 5.32.0 入れたんだけどcpanでinstallコマンドを使うとperl.exeがCPU消費したまま戻ってこなくなる現象が起きるね。
724デフォルトの名無しさん
2020/09/04(金) 16:02:36.23ID:i1o0tLie
今までになくTkをインストールするのが大変だった、5.32.0。
ソース改変してcpanの外でgmake & gmake installせざるを得なかった。
さっさと修正してほしい。
725デフォルトの名無しさん
2020/09/04(金) 18:10:58.52ID:4QR5o/NS
思い切ってPyQTにしてみろ。こっちのがいいぞ。
726デフォルトの名無しさん
2020/10/08(木) 23:36:20.91ID:j69EnO8Y
こんな過疎ったクソスレだけど、たまにやって来る質問者をガヤが追い出そうと必死になるんだよな
頭の中どうなってんだろ
727デフォルトの名無しさん
2020/10/11(日) 18:23:11.86ID:uVmgdJtU
すいません、あるサイトの記述で下みたいな構文なんだけど
$aiueo = [AAA =>123,BBB=>345];
変数は変えてあります
ハッシュのリファレンスとは違うようなんだけど何をやってるかわかりますか?
それと、この構文で123をprintで表示してみたいのですがどうやればいいのでしょうか
728デフォルトの名無しさん
2020/10/11(日) 18:26:38.16ID:KfmOTZ8w
=>は,と同じなので単なる配列リファレンスです
729デフォルトの名無しさん
2020/10/11(日) 19:36:36.33ID:LtBR6JI3
$$aiueo{AAA}
$aiueo->{AAA}
だっけ?
730デフォルトの名無しさん
2020/10/11(日) 20:54:29.02ID:OOWRCRR6
一旦ハッシュ化しないと無理なのでは
731デフォルトの名無しさん
2020/10/11(日) 21:00:17.13ID:Cs7yLb7a
だね。配列のままなら print $aiueo->[1];
732デフォルトの名無しさん
2020/10/11(日) 21:08:33.51ID:OOWRCRR6
配列() のリファレンスが []
ハッシュ() のリファレンスが {}

というややこしい部分に引っかかって間違って書いてるだけと予想
733デフォルトの名無しさん
2020/10/11(日) 21:26:08.40ID:KPje/k62
pseudo hash の話かと思ったら違った
734デフォルトの名無しさん
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 を使うためには、どのようにすればよろしいでしょうか?
735デフォルトの名無しさん
2020/10/20(火) 12:39:40.78ID:JJDPr70D
環境変数からなら行けたような
736デフォルトの名無しさん
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
737デフォルトの名無しさん
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を書きました。
738デフォルトの名無しさん
2020/10/20(火) 14:46:34.93ID:JJDPr70D
なんでC:\なんか探しに行くんだろう
739デフォルトの名無しさん
2020/10/20(火) 18:08:46.77ID:NolEEcIo
blib.pmはカレントまたは指定したパスから数レベル上まででblib/libとblib/arch両ディレクトリが存在したら@INCの先頭に追加、無ければエラーで終了するだけのモジュール
該当ディレクトリが無かったからC:\にたどり着いたというだけ

Active PerlはWin32::Pipeバンドルされてたはずなのでblib不要
740デフォルトの名無しさん
2020/10/20(火) 18:38:58.16ID:D4H7EOaJ
>>739
よく解りました。ありがとうございました。
741デフォルトの名無しさん
2020/10/20(火) 21:44:35.79ID:tFiyzFdf
blib.pmはちゃんとuseされていて、blib.pmの動作としてエラー終了したということですか
742デフォルトの名無しさん
2020/10/20(火) 22:27:40.87ID:sh3hHW9L
die "Cannot find blib even in $dir\n" って blib.pm のソースに思いっきり書いてあるがな
743デフォルトの名無しさん
2020/10/20(火) 23:34:27.10ID:tFiyzFdf
なるほd
744デフォルトの名無しさん
2020/10/25(日) 10:29:53.41ID:eR26jTX4
ライブラリが読めてないのか、読めてるけどエラーになるのかの切り分けが必要だったな
745デフォルトの名無しさん
2020/10/25(日) 11:05:07.83ID:/f/Br1ml
"¥n"なければ分かったのにね。
746デフォルトの名無しさん
2020/10/25(日) 11:49:26.86ID:/f/Br1ml
あ、でもやってみたら@INCにない場合とメッセージ違うんだな。
とはいえ知らないと分からないよね。
747デフォルトの名無しさん
2020/10/27(火) 08:27:55.72ID:K6PuV+RV
httpsをgetする楽な方法って何
748デフォルトの名無しさん
2020/10/27(火) 12:24:00.33ID:FNX2BsFN
>>747
ブラウザを遠隔操作することだろうね。
昔、Win32::IEAutomation 使っていたけど、
今はどんなモジュールがいいのかよく解らない。
749デフォルトの名無しさん
2020/10/27(火) 22:34:11.97ID:wfYFUdXE
>>747
Linux とかなら wget または curl コマンド。
Windows は知らないけど探せば同じコマンドあるんじゃないかな。
それとかPowerShellだと何かないか?ありそうだよな。俺知らないけど。
750デフォルトの名無しさん
2020/10/27(火) 23:05:01.31ID:K6PuV+RV
難しいのう
firefoxから証明書をエクスポートして食わせてwgetしてもまだ成功しない
751デフォルトの名無しさん
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
752751
2020/10/28(水) 00:05:57.96ID:H1Ljm7vl
Windows 10 には、curl.exe も入っている。
これは、PowerShell のcurl エイリアスとは異なる

コマンドプロンプトで、
where curl
C:\Windows\System32\curl.exe
753デフォルトの名無しさん
2020/10/28(水) 00:13:29.52ID:BzF//FKs
なんで ruby が出てくるんだろう
754デフォルトの名無しさん
2020/10/28(水) 06:24:58.52ID:SUh9rNlQ
lwpが出ない時代になったのか……
755532
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;
756デフォルトの名無しさん
2020/10/28(水) 08:42:17.53ID:inVpsElI
なんでそんな大事なもんがインストール必要なんだ
757デフォルトの名無しさん
2020/10/28(水) 13:29:32.90ID:l3R5yM/w
ネットワーク関連は、原則別扱いやろ。
758デフォルトの名無しさん
2020/10/28(水) 18:43:51.13ID:14aXOJ7K
そこはマジで面倒だなと思うね
pythonのrequestsモジュールとか何も考えずにできるし
759デフォルトの名無しさん
2020/10/28(水) 19:30:04.62ID:inVpsElI
電池は自分で買って下さい
760デフォルトの名無しさん
2020/10/28(水) 19:35:38.14ID:ITw4VFJA
今ならコアモジュールのHTTP::Tinyで十分でしょう
IO::Socket::SSLかNet::SSLeay をインストールする必要がありますが
pythonだってrequests
761デフォルトの名無しさん
2020/10/28(水) 19:36:09.55ID:ITw4VFJA
は自分で入れなきゃいけないし
762751
2020/10/28(水) 22:46:17.13ID:H1Ljm7vl
Ruby なんて、よく使うものは、標準で入っている

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

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

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

自分は、文節の区切りが漢字で連続しているあるいはひらがなで連続している時に、
読みやすさの為に入れることがよくある
767デフォルトの名無しさん
2020/10/29(木) 08:52:06.32ID:z1UD/sEY
読点ふつうに使った文章でそれ言われても説得力ゼロやんな
768デフォルトの名無しさん
2020/10/29(木) 12:59:56.99ID:DfWTURJR
普段文ではあんまり使わないかな 空白を使うようになった
てか。もあんまり使わない。改行するようになった。
これ最近の傾向ね。
ちゃんとした文章の時は学校で習ったようにちゃんとするよ。
たまに見かける、多用の文章はバカっぽくて好きになれない。
769デフォルトの名無しさん
2020/10/29(木) 16:41:07.61ID:6ZxgJt1a
お前ら得意のうんちく・知ったかで生き生きしてるな
どうでもいい話題になると湧いてくるのな
770デフォルトの名無しさん
2020/10/29(木) 23:07:14.55ID:XA006Kuj
Perl好きの住人がいるんだよ。
なんかネタがあると湧いてくるが自分からは投入しない。
というか今更ないんだよな。
771デフォルトの名無しさん
2020/10/30(金) 08:36:37.09ID:yt6Q5TzG
LWP::Protocol::https はインストールしなくても入ってるみたいだけど、
やっぱりアクセスできない
772デフォルトの名無しさん
2020/10/30(金) 14:14:14.77ID:Nsw5dj/j
>>770
かつてのPerlハッカーたちが完全に沈黙してるからね
Rakuとかもっと使えよって思います
773デフォルトの名無しさん
2020/10/30(金) 14:28:46.49ID:NEqe6Fpq
IO::Socket::SSLかNet::SSLかが入ってないんじゃね?
774デフォルトの名無しさん
2020/10/30(金) 14:45:50.35ID:yt6Q5TzG
入ってなかったら入ってないというエラーになるんじゃないのかな
プロトコルのエラーになるんだよな
775デフォルトの名無しさん
2020/10/30(金) 16:51:58.64ID:yPjXBzu5
>>772
Perl6できたてのころにちょっと試したけど、スクリプト言語的な使いやすさがなくなってたからなあ。
きっと普及せんやろな、と思った。
776デフォルトの名無しさん
2020/10/30(金) 17:12:05.20ID:X2Arn8L3
Strawberry Perl 5.32 向けのTk、相変わらずビルドエラーを手動修正しないとインストールできない。
バンドルされているコンパイル環境の問題かもしれないけど、そのままってのはちょっと。
Tkって重要じゃね?どうよ?
777デフォルトの名無しさん
2020/10/30(金) 17:49:50.64ID:Nsw5dj/j
>>775
ほんのちょっと改善するだけでも十分だったのにな
778デフォルトの名無しさん
2020/10/30(金) 19:26:17.53ID:yPjXBzu5
>>777
いや、大きな追加機能自体はおもしろそうなんだよ?
Grammarとか。

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

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

多分
785デフォルトの名無しさん
2020/10/30(金) 22:37:14.50ID:yPjXBzu5
>>783
えー、簡単そうやん?w

https://mattn.kaoriya.net/software/lang/perl6/20151019183138.htm
786デフォルトの名無しさん
2020/11/02(月) 15:05:38.99ID:iEycKQwb
Raku の Grammar というのは、「クラス定義+演算子のオーバーロード」
と比較して、何が優れているのだろうか?
787デフォルトの名無しさん
2020/11/02(月) 17:51:29.15ID:ew0mgVfp
えっ。
ターゲットというか、適用領域が違うんでは。
788デフォルトの名無しさん
2020/11/13(金) 10:25:46.33ID:ZCyQI0Un
処理済みかとか、除外対象か、みたいなチェック用に
%except = (aaa => 1, bbb => 1);
みたいなテーブルを作っておいて、
if (!$except{$x}) { ... }
みたいなことをする

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

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

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

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

"U:/FirefoxPortable/FirefoxPortable.exe" https://foo/bar/
798デフォルトの名無しさん
2020/11/18(水) 00:40:53.82ID:T6Vtm1bs
ありがとう
`C:/Program Files (x86)/Google/Chrome/Application/chrome.exe`
とりあえずここまででchrome開くことはできたのですがURLの指定はできないでしょうか?
799デフォルトの名無しさん
2020/11/18(水) 01:11:22.59ID:OSmP9Gk2
>>798
>>797
800デフォルトの名無しさん
2020/11/18(水) 01:32:09.00ID:T6Vtm1bs
system("\"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe\" https://www.yahoo.co.jp/";);
完成しました
ありがとうございました。
801デフォルトの名無しさん
2020/11/18(水) 08:31:15.08ID:XTvONPVJ
>>800
wperl.exeからsystem()を呼び出すと新しいコンソールウィンドウが開くので要注意。
802デフォルトの名無しさん
2020/11/28(土) 15:40:18.08ID:EM73A4Gg
指定した年月日からx日後の日付を数で得るにはどうするのが一番楽だろう
803デフォルトの名無しさん
2020/11/28(土) 18:31:31.18ID:1bDz9VeK
「数で得る」というのがよく解らないが、timelocal()とlocaltime()を使えば、
多分、やりたいことができると思う。
804デフォルトの名無しさん
2020/12/03(木) 17:27:36.92ID:PrWVOzOn
これから仕事ではじめてperlを使うんだけど、メッセージやメール出力などにマルチ言語対応が入ってる
resourceに言語ファイルをいれる形で実現したいけど、どのようにするのがいいか教えて下さい

複数のスクリプトを開発して連係させる予定
805デフォルトの名無しさん
2020/12/05(土) 13:44:54.28ID:DP7JjxAq
ヒアドキュメントの中で数式を使うやり方は?
@{[数式]}
のようにやってもエラーで動かなかった
806デフォルトの名無しさん
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
807デフォルトの名無しさん
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);

こんなん
808デフォルトの名無しさん
2020/12/05(土) 16:43:15.39ID:dBHdheKW
>>805
おかしいな。それで合ってるように思えるんだが。
この辺りを読んで、何か誤解してないか確認したらいいかも。
https://perldoc.jp/docs/perl/5.26.1/perlref.pod
809806
2020/12/05(土) 18:18:59.36ID:3OUqO/Qz
「perl 時刻 計算」で検索すれば?

日付・時刻を扱う標準モジュール、Time::Piece が標準で添付されています。
もっと便利なモジュールを、誰かが作っているかも
810デフォルトの名無しさん
2020/12/05(土) 18:31:57.30ID:+/FrBp4K
localtimeからスタートする時はそれが便利
何か基準の日付から計算しようとすると面倒になる
811デフォルトの名無しさん
2020/12/05(土) 20:29:02.43ID:5ARiBM7n
>>805
数式自体にエラーがあるんやろ。w
じゃなきゃエラーをはれ。
812デフォルトの名無しさん
2020/12/05(土) 23:54:20.43ID:DP7JjxAq
>>811
print <<"eos";
@{[print "aaawww";]}
eos

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

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

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

$ perl aaawww.pl
aaawww1


;を省くと動くが、「1」とか余計なものがつくな
815デフォルトの名無しさん
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.
816デフォルトの名無しさん
2020/12/06(日) 01:06:20.00ID:rqNKNacS
単なる構文エラー
無名リストの中に裸のセミコロンがあったらまずいでしょ
["A", "B", 3, ";"] OK
["A", "B", 3, ;] エラー

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

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

もし今後UTCとかJSTとか出てきたときはそのときまた考える。
819デフォルトの名無しさん
2020/12/06(日) 02:06:04.21ID:fHRDTQ7E
PerlのYAML関連のモジュールが全部重くて厳しい
高速なYAMLモジュールはないのか?
820デフォルトの名無しさん
2020/12/06(日) 10:37:45.21ID:kLx/M/5Z
まずは高速なCのライブラリを見つけます
821デフォルトの名無しさん
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";
822デフォルトの名無しさん (ワッチョイ be3b-cfMa)
2020/12/06(日) 11:58:40.89ID:5Rf1GOX10
見るからに面倒臭い
823デフォルトの名無しさん
2020/12/07(月) 09:18:58.50ID:zfvnE2zk
$basetime = timelocal_nocheck($sec, $min, $hours, $mday+$intvl, $mon-1, $year-1900);
824デフォルトの名無しさん
2020/12/07(月) 09:43:24.77ID:UAiCPmDo
Time::Piece はよくできてて、何かのログとかに現在時刻を書き出す、
とかの用途には十分に使える

でも、時刻計算や日数計算はあまり考慮されていない
現在時刻からの計算はできても、任意の時刻からだと弱い
825デフォルトの名無しさん
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";
826デフォルトの名無しさん
2020/12/07(月) 14:21:35.27ID:UAiCPmDo
まあ、strptime さえ目を瞑れば
こんなもん、何か見ないと書けない
827デフォルトの名無しさん
2020/12/07(月) 15:40:13.93ID:15jj6qfl
use POSIX; を宣言してCの標準関数に似た時刻処理機能を使うのが普通じゃないの?
Cの時刻処理サンプルコードを円滑にPerlに移植できるよ。
828デフォルトの名無しさん
2020/12/07(月) 17:17:12.82ID:VC6/tHTg
>>826
DateTimeモジュール使えば全て解決なんだが
クソデカくて重いという弱点が
829532
2020/12/07(月) 21:57:48.14ID:WG5ppFXF
Time::Pieceの弱点は
strptime()で作ったインスタンスのtimeゾーンをいじれないとこかな?
後1つなんか弱手あった気がするが忘れた
830デフォルトの名無しさん
2020/12/07(月) 22:38:30.88ID:UAiCPmDo
strptimeはpythonでもrubyでも同じだから、もう慣れなんだろうな
'YYYY-MM-DD' とかではあかんかったのか
831デフォルトの名無しさん
2020/12/08(火) 04:35:26.34ID:65P2yCaW
>>821
timeLocal()の年は1900引かない方がいいよ。これちょっとCのライブラリとは違うんだよ。詳しくはドキュメント読んで。
832デフォルトの名無しさん
2020/12/08(火) 04:36:34.48ID:65P2yCaW
あ。タイプミス。timelocal()ね。
833デフォルトの名無しさん
2020/12/08(火) 23:53:37.62ID:VS4VHEi1
すみません、ソートで教えて欲しいんですが下記のようにみたいな枝番号が付いてる文字列をハッシュのキーとして
ハイフン前の数値でソートした後にハイフン後の数値でソートしたいのですが
普通に$a <=> $bだとハイフンの後の値がバラバラになって上手くいきません
キーを作る際に別々に作ってループ増やすくらいしか自分には解決方法が無いのですが、スマートに出来る方法は無いのでしょうか?
1-1
1-2
2-1
2-2
3-1
834デフォルトの名無しさん
2020/12/09(水) 00:31:36.73ID:LWKBPFtb
>>833
シュワルツ変換で検索!

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

伝わるかな?w
836デフォルトの名無しさん
2020/12/09(水) 08:45:38.11ID:UMU4oc+t
それで書けるなら、sort { } でも書けるよね
837デフォルトの名無しさん
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;
}
838デフォルトの名無しさん
2020/12/09(水) 10:27:05.71ID:LWKBPFtb
>>836,>>837
それだと、要素の比較のたびに、値の変換処理が行われる。
比較は何度も行われるため、変換処理が軽くない場合、ソート全体としてかなり重くなりうる。
すくなくとも「スマート」とは言えない。

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

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

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

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

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

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

関数で評価しないといけないと判っていて、動的に処理する必要も無いんだから、
評価済みのテーブルを内部に持たせようというのは自然な発想
844デフォルトの名無しさん
2020/12/09(水) 13:12:15.55ID:/81rDyGm
>>843
試してから言え。
きっと、想像以上の出力が出てきて驚くから。
845デフォルトの名無しさん
2020/12/09(水) 13:44:43.94ID:UMU4oc+t
判ってないのかな

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

読みにくい…かなあ?
850デフォルトの名無しさん
2020/12/09(水) 17:06:18.35ID:8NKLSi5o
>>849
他の言語の人が見たら発狂しそう
851デフォルトの名無しさん
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);
}
852デフォルトの名無しさん
2020/12/09(水) 18:16:58.18ID:xAMitlRd
発狂しない人が使えば良いよ
853デフォルトの名無しさん
2020/12/09(水) 19:43:12.41ID:LWKBPFtb
>>848
おまえ、ハードな処理を実装したことがないやろ?w

慣れたPerl使いはわざわざ>>851みたいなコードは書かない。
遅いし、くどくて逆に読みにくいからな。
854デフォルトの名無しさん
2020/12/09(水) 19:45:15.15ID:LWKBPFtb
>>850
C#でも、タプルが使えるようになったので、似たようなコードは書く。
LINQなぶんだけPerlより読みやすいけど。
855デフォルトの名無しさん
2020/12/09(水) 22:17:09.12ID:rsuX7ND7
ハッシュテーブルにs1($val)の戻り値を保存して、そのハッシュテーブルを使って比較関数を呼び出すとかするのが普通でしょ。
856849
2020/12/10(木) 06:03:00.77ID:+FxPMgzN
読みやすい優れたコードが >>851 か。
自分のコードを出してくれた点は評価するが
$1 * 100 + $2
って何?
857デフォルトの名無しさん
2020/12/10(木) 16:08:39.86ID:smJEm1Fb
2桁前提なんだろうな
858デフォルトの名無しさん
2020/12/10(木) 19:59:40.99ID:g17Qy/zb
>>857
>>834なら4桁までイケる。w
859デフォルトの名無しさん
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;
860デフォルトの名無しさん
2020/12/11(金) 03:42:00.36ID:Hz2bdcAQ
複数キーでのソートに帰着させるべきなんだろうな
1-1-1 も許容する、とかになった瞬間に破綻する
861デフォルトの名無しさん
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;
}
862856
2020/12/11(金) 06:10:31.03ID:LwDR4/oY
>> 833 には数値の値域については何も書かれてないんだから
勝手に想定しない方がいいと想うよ。
どうしても比較を簡略化したいなら pack 関数で数値を全部
ビッグエンディアンで並べればいいんじゃないかな。
863デフォルトの名無しさん
2020/12/11(金) 10:41:01.46ID:vQm1aiEb
>>860
最初から想定されてるのでなければ、ひどい仕様変更なんだから、実装変更もやむなしやろ。
数字じゃなくてアルファベットにします、と言われただけでパーやし。w
864デフォルトの名無しさん
2020/12/11(金) 10:50:54.59ID:vQm1aiEb
>>862
勝手に想定するのもあたりまえ。
じゃないと、なんにも例示できなくなるで?

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

アルファベットにも対応するのは次元が違う
866デフォルトの名無しさん
2020/12/11(金) 19:40:49.33ID:V1LdBVWq
>>864
こういうひとがコーディングすると
バッブァオーバーランとか起こしてセキュリティに穴を開けるんだな
867デフォルトの名無しさん
2020/12/11(金) 20:46:31.45ID:vQm1aiEb
>>866
アホなの?
他人のコードのバッファオーバーランなんか知らんわ。
自分で責任を持て。
868デフォルトの名無しさん
2020/12/11(金) 21:01:49.19ID:jm3zE7RU
普段は過疎ってるのに少し書き込みがあるとクソ雑魚が湧いてきてグズグズ文句たれる
頭の中どうなってんだろうな
869デフォルトの名無しさん
2020/12/11(金) 22:34:31.89ID:Hz2bdcAQ
んでんでんで
870デフォルトの名無しさん
2020/12/11(金) 22:41:46.66ID:pFqzegRi
>>837 だが、実は、このコードは、オレが実際に、数字とかアルファベットとかが
複雑に絡んだ文字列を、ある規則に従ってソートするために作ったものを
流用したんだ。だから、応用範囲が広いという点では、これがいいと思うけどな。
871デフォルトの名無しさん
2020/12/11(金) 22:48:30.39ID:Hz2bdcAQ
sortの関数って@_で受けれるの?
872デフォルトの名無しさん
2020/12/11(金) 23:30:45.59ID:vQm1aiEb
>>870
にしたって、超激遅やで?
要素数が充分に少なきゃええけど。
873デフォルトの名無しさん
2020/12/11(金) 23:38:00.26ID:Hz2bdcAQ
どう見ても章のタイトルとかそんなんなので、1000も無いよ
高速化の工夫は遅くて困ってから
874532
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()関数のアルゴリズムに依存しない書き方がしたいなら
左と右の数値で二段階のソートをするか、右の数字と左の数値で順位に一貫性のあるキーを作って
一段階のソートで済ませる方法もあると思う。

そういったサンプル実装を見たいのであれば、時間があればくけれども…
875532
2020/12/12(土) 00:42:28.87ID:tTwN9OuS
つか、実は Tie::IxHash を使ってhashに登録したデータの順番を維持して取り出せれば
いいだけの話だったりしてな。しらんけど
876デフォルトの名無しさん
2020/12/12(土) 00:47:36.64ID:iq4I9JA8
>>867
アホだなあ
877532
2020/12/12(土) 00:48:12.17ID:tTwN9OuS
>>849
おっとここに十分な解答があったわw
878デフォルトの名無しさん
2020/12/12(土) 01:06:54.59ID:4UtPcEnB
>>876
Perlでバッファオーバーランを実装する方法を教えてください。w
879デフォルトの名無しさん
2020/12/12(土) 02:31:23.48ID:gfhxsiY6
バッファオーバーランつまり out of range なんてすぐ起こせるでしょ。
880デフォルトの名無しさん
2020/12/12(土) 03:38:37.71ID:4UtPcEnB
>>879
具体的に詳しく!
Perlでな?
881862
2020/12/12(土) 09:07:56.06ID:K38oRjDr
pack に誰も食いついてこないのはちょっと寂しいな。
正しくやれば C でさえ 1 回の memcmp で比較が済むのだが。
ましてや、Perl の pack/unpack は Perl4 の時代からある超便利関数なのだが。
まあ、「ひょっとして比較をシンプルにしたいのかな?」と思ったから書いただけだし
今回のニーズには合ってても万能というわけではないし
自分が良いと思う方法でやればいいと思うよ。
882デフォルトの名無しさん
2020/12/12(土) 09:26:02.24ID:kEr/Zqiv
数1つあたりのbit数が決められないがな
何とかしてmap使いたいから無理筋言ってるだけとしか
883532
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";
884532
2020/12/12(土) 10:47:43.50ID:+ekv//0b
こうやって幾つかコード書いてみて…>>849かTie::IxHashで十分な気がしたわw
885デフォルトの名無しさん
2020/12/12(土) 13:20:14.94ID:4UtPcEnB
>>881
慣れたヤツには最適解過ぎ、慣れてないヤツには意義がわからん、ということで、そんなに食いつきようがないやろ。w
886デフォルトの名無しさん
2020/12/16(水) 23:33:00.22ID:qMOR0fCG
>>833
もしそれが桁数固定で、例えばその例のように一桁の数、ハイフン、一桁の数という文字列ならば、何も考えずにそのまま文字列として比較して sort すればいい。つまりただ sort するだけ。
887デフォルトの名無しさん
2020/12/17(木) 05:05:50.95ID:fz9fvgi4
そんなもんは9で終わる訳がなくて10も100もある筈、と自然に拡張して考える
それと同様に、枝番号ならサブサブセクション以降もある筈、という拡張は
自然なのに、そっちには思い至らないんだよな
888デフォルトの名無しさん
2020/12/17(木) 09:44:28.00ID:RUflbAwb
>>887
外野が考えることじゃない。
>>886は、簡単なケースの例を言ってるだけだから、それでええやろ。
889デフォルトの名無しさん
2020/12/18(金) 08:38:15.55ID:1Xc4Ax1A
「数値でソートしたい」って最初から書いてあるだろ……
890デフォルトの名無しさん
2020/12/18(金) 08:53:35.39ID:lJHaaS7Y
今だけはいいけどすぐに駄目になりそうな設計を、
裏技見つけたみたいにやりたがる奴がいるんだよな
ユーザは予想を超えた無茶をしてくるものなのに
891デフォルトの名無しさん
2020/12/18(金) 09:55:06.92ID:Kz3E+lfW
Keep It Simple, Stupid
892デフォルトの名無しさん
2020/12/18(金) 09:58:16.29ID:lJHaaS7Y
よい設計というのは自然とシンプルになるものなんだよ
893849
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);
}

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

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

ちなみに、もしそのファイルに拡張子があるならレジストリで指定する方法もある。
「windows apache レジストリ 拡張子」で検索!
903デフォルトの名無しさん
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の中身は空ではない
904デフォルトの名無しさん
2020/12/28(月) 00:28:09.86ID:AD+30T3D
>>903
ファイルシステムのルートとドキュメントルートはまったく異なる。
ファイルシステムはプログラム自身が処理するが、URLはまずブラウザが解釈する。

まず落ち着いてよく考えろ。
905デフォルトの名無しさん
2020/12/28(月) 08:24:52.02ID:oUNoRxKm
>>904
つまりperlプログラム中で指定する/test.htmlはファイルシステムのルートパスになり
リンクタグで指定する/test.htmlはドキュメントルートのパスになるということですか?
906デフォルトの名無しさん
2020/12/28(月) 08:37:46.11ID:9b76uWwh
ドキュンルート
907デフォルトの名無しさん
2020/12/28(月) 21:50:36.57ID:gLlPtDZl
>>905
わかってるやん
レスコジキなら他に行ってくれ
908デフォルトの名無しさん
2020/12/30(水) 20:09:27.64ID:ygO1FIcm
過疎ってる方が落ち着くという人もいるらしい
909デフォルトの名無しさん
2020/12/30(水) 20:26:20.53ID:ZDzqqnZf
初心者が嫌いな「上級者」で過疎っているほうが落ち着くなら、このスレがいいな。

【Perl上級者コーナーPart01】
http://2chb.net/r/php/1024741312/
910デフォルトの名無しさん
2020/12/30(水) 21:55:58.30ID:Fpo/gio8
>>907
わかってるとはいえんよ。
結果のおうむ返しだけみたいだからな。

落ち着いて考えればわかるはずだし、それでしっかり納得したほうがいいことだから、元コメに返事はしないが。
911デフォルトの名無しさん
2021/01/03(日) 17:25:22.42ID:Lv3VCxJc
ブラウザのクッキーを許可してるかどうかを調べるにはどうしたらいいんですか?
クッキーを書き込めたら許可されているというやり方だと
書き込んだ直後はクッキー読み取れない
更新ボタンでページを更新しないとクッキー読み取れないので他のやり方で
912デフォルトの名無しさん
2021/01/03(日) 17:33:27.51ID:qCTYrijY
お、今年初めの質問だね。
君の悩みは質問箱住人が解決するよ。
ささ、甘酒どぞ。つ甘
みんなーお客さんだよー。
913デフォルトの名無しさん
2021/01/03(日) 19:13:07.92ID:fvS6UGyp
>>911
javascript併用したくないならHTTPヘッダで
print "Set-Cookie: hoge\n";
print "Location: hage\\n\n";
みたいな感じでクッキー書いてリダイレクトすればいいんじゃね
914デフォルトの名無しさん
2021/01/03(日) 20:53:05.77ID:Lv3VCxJc
>>913
なるほど、でもそれ無限ループにならないっすか?
915デフォルトの名無しさん
2021/01/03(日) 21:41:10.96ID:Y2yZ564Q
>>914
サーバーで判定したらええやろ。
そもそもそういう話のはず。
916デフォルトの名無しさん
2021/01/03(日) 21:44:24.27ID:fvS6UGyp
>>914
クエリパラメータ追加するなり工夫すれ
917532
2021/01/25(月) 02:03:08.62ID:NGykvctj
https://perlcodesample.hateblo.jp/entry/2020/07/10/082720
918デフォルトの名無しさん
2021/02/13(土) 20:39:32.56ID:puXqs/bZ
U+10000からU+1FFFFまでの文字があったら置換したい時はどう書けばいい?
919デフォルトの名無しさん
2021/02/13(土) 20:57:13.59ID:aGYlIUX0
>>918
s/U¥+(1¥x{4})/pack(q{U},$1)/eg
とかか?

https://perldoc.jp/docs/perl/5.10.0/perluniintro.pod
920デフォルトの名無しさん
2021/02/13(土) 21:54:38.37ID:puXqs/bZ
あー
U+10000という文字列を置換したいのではなく、それが示すサロゲートペアを置換したい
921デフォルトの名無しさん
2021/02/14(日) 01:36:58.65ID:u5RUQBwf
>>920
s/([¥x{10000}-¥x{1ffff}])/unpack(q{U},$1)/eg
かな?
ダメな気もするが。

つーか、さっきのURLにいろいろ書いてあるから、一度目を通して自分で試してみろ。
んで、うまくいったら、結果を貼るようにな。
922デフォルトの名無しさん
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;
これが正解だった
923デフォルトの名無しさん
2021/02/14(日) 10:00:12.81ID:yrV2Bu9C
Perlの場合、マルチバイト文字で正規表現を正しく使うには、あらかじめEncode::decode()でデコードしておく必要があるので厄介。
924デフォルトの名無しさん
2021/02/14(日) 11:18:28.10ID:u5RUQBwf
>>923
Perlに限らんやろ。
エンコーディングをまったく気にせず対応している処理系なんか存在しない。
925デフォルトの名無しさん
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;
926デフォルトの名無しさん
2021/03/03(水) 20:20:14.74ID:DgitZS9x
正規表現を使うところではない気がするな。w
ちょっとおちついて、行単位で処理していけよ。
927デフォルトの名無しさん
2021/03/03(水) 23:36:11.18ID:Q9ky3RP3
>>926
そういうもんなんですか?
pythonだとre.finditerでイタレータ毎に取れるので似たような感じにperlでもどうにか出来るんだろうと思ったのですが無理そうなら諦めます
928デフォルトの名無しさん
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"}]
929デフォルトの名無しさん
2021/03/04(木) 00:11:02.54ID:Pkas/NOZ
>>927
可不可の話なら、while (m/start..end/g) {...}みたいにしたらきっとできる。

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

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

正規表現は柔軟性なので、使わなくていいくらいかっちりしてるものには
使わない方が安全側に倒れる
元ファイルが手書きで、無駄な改行やコメントが入ってるなら正規表現
933デフォルトの名無しさん
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
934デフォルトの名無しさん
2021/03/07(日) 10:45:56.10ID:Q92Mc+WL
安定して動かないならバグっている

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

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

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

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

隅々までどうなってるか判らないものに再帰は威力を発揮するけど、
そういうのは往々にして停止性が保証されない
944デフォルトの名無しさん
2021/03/07(日) 18:11:41.00ID:eIiM+J9a
それはあんたが無能だから
945デフォルトの名無しさん
2021/03/07(日) 18:18:17.98ID:x9JK9zFw
Perlと関係ない話はよそでどうぞ
946デフォルトの名無しさん
2021/03/07(日) 23:39:46.89ID:quYd9iFF
>>943
再帰終了をちゃんとできないヤツは、ループ終了もできないやろ。w

ディレクトリうんぬんに限って言えば、ファイルシステムへの知識が足りないとかか。
リンク系の。
947デフォルトの名無しさん
2021/03/07(日) 23:53:02.15ID:Q92Mc+WL
軽く考えてるけど、プログラムの停止性ってもっそい奥が深い
ゲーデルの不完全性定理と密接に絡んでる
948デフォルトの名無しさん
2021/03/08(月) 00:03:00.68ID:RDgJTpCR
tarのhオプションってよくできているよな
無限ループに陥りやすいが
949デフォルトの名無しさん
2021/03/08(月) 00:23:56.56ID:tQicr2bh
再帰処理は考えてるの楽しいよな
実装するかとなると状況次第
950デフォルトの名無しさん
2021/03/08(月) 01:47:35.66ID:6lKYXbK2
>>947
バグが存在しない証明は超難しいから、ふつうやらない。
かわりに、テストを必要なだけする。
それだけのこと。

原理とやらは学者に任せておけばいい。
951デフォルトの名無しさん
2021/03/08(月) 10:04:20.07ID:XzCJxGl3
ggl先生に "perl dir tree" で検索かけたら自作ページが多いね。
安心安全鉄板ライブラリとかってあるかな?
素人考えでなんだけど・・・OS別、FS別なんてあるんかの。
952デフォルトの名無しさん
2021/03/08(月) 10:17:22.69ID:SORPad+v
親にリンクしていてループするのが困るので、
全部の子に対してカウンタを持たせる、くらいしか回避方法が無いんだよな
それだと再帰でやってるうまみが無くなってしまう
953デフォルトの名無しさん
2021/03/08(月) 12:03:45.46ID:JySUELLY
素直にFile::Find使っとけ
954デフォルトの名無しさん
2021/03/08(月) 12:34:19.76ID:SORPad+v
dir /s の結果を使うのが一番楽
955デフォルトの名無しさん
2021/03/08(月) 16:27:27.25ID:3P7OMB5d
File::Findは処理速度が遅いのが難
956デフォルトの名無しさん
2021/03/08(月) 17:21:12.95ID:6lKYXbK2
>>952
リンクを不用意にたどるな。
既存コマンドでもオプションにしがちだし、ディレクトリ構成によっては死ぬくらいだから、しゃあない。
957デフォルトの名無しさん
2021/03/08(月) 17:24:47.95ID:6lKYXbK2
>>955
何と比べて?
no_chdirを指定したりしたらマシになったりしない?
958デフォルトの名無しさん
2021/03/08(月) 17:40:53.14ID:SORPad+v
ディレクトリならどこかにある実体のコピーだろうから、リンクなんか無しで済むけど、
より一般化したリスト構造だったら辿らない訳にいかない
だから、事前にループしていないことを確認してから処理することになって、
そのテストがループにはまる
959デフォルトの名無しさん
2021/03/08(月) 20:06:16.14ID:3P7OMB5d
>>957
試してみたが、no_chdirは関係ない。
File::Findは、dir /S /B コマンドのパイプ読み取りに比べて、3倍も時間がかかる。
File::Findは遅いだけでなくコールバックでユーザー変数を扱えない欠点があるから、私はFile::Findを使わない。
960デフォルトの名無しさん
2021/03/08(月) 21:30:38.88ID:3P7OMB5d
File::FindはUnix系OSで使う場合は find コマンドのパイプ読み取りと同等か少し速い。
File::Findが明確に遅いのはWindows向けにビルドされたPerlの場合のみ。
961デフォルトの名無しさん
2021/03/08(月) 22:05:40.64ID:6lKYXbK2
>>960
WindowsのどのPerl?
ひょっとしてCygwin版?
ActivePerlやMSYS2版ならマシだったり?
962デフォルトの名無しさん
2021/03/08(月) 22:39:10.09ID:3P7OMB5d
>>961
残念ながらネイティブに最適化されているはずのActivePerl や Strawberry Perl でFile::Findが遅い。
原因は知らないけどWin32APIの使い方が良くないからだと思う。
963532
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せにゃならん。
964532
2021/03/09(火) 00:15:08.81ID:jxvXMO9/
別件だがWindowsではSJISで全角「構」などの2バイト目が\(0x5c)のフォルダには
perlからlstatやutimeが出来ないみたいで難儀した。
Linuxのutf8のファイルシステムと違ってWindowsのSJISファイルシステムは面倒
965デフォルトの名無しさん
2021/03/09(火) 01:17:12.50ID:B0uPByTP
>>962
そうやったか。。。

>>964
NTFSファイルシステム自体はUTF-16やぞ?
MicrosoftがようやくいよいよコマンドプロンプトとかNotepadとかのUnicode対応を考えはじめてるし、いずれWindows版も対応するんちゃうか。
いっそツッコんだら?
966928
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
967デフォルトの名無しさん
2021/03/09(火) 08:00:45.91ID:4CK4kuWA
コマンドプロントはとっくにUTF-16対応している。出力フォントが表示に対応していないだけ。
コマンドプロントにはもう機能追加されないから Windows Terminalに乗り換えたほうがいい。
968デフォルトの名無しさん
2021/03/09(火) 08:27:17.16ID:4CK4kuWA
コマンドプロントは今でもすでに非システムコード文字(アラビア文字やハングルなど)をコマンドに引数渡しできる。
受け取る側のアプリがUTF-16形式で起動時の引数を取らなかったり、batファイルが非システムコード文字に対応していないだけ。
コマンドプロントの努力だけではどうしようもない。

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

一方、Windows向けビルドされたPythonは非システムコード文字を引数で受け取ることができる。
Pythonのプラグインを作ったことある人なら分かると思うが、Pythonはインターフェース間の文字列のやりとりにUTF-16を使っている。
969デフォルトの名無しさん
2021/03/09(火) 08:33:53.42ID:HJK4uNxM
UTF-16も嬉しくない
970532
2021/03/09(火) 08:45:38.83ID:UTQZC5u1
NTFSってUTF-16だったのか、
しかしperlのreaddirはcp932で返してきているような気がs…
971デフォルトの名無しさん
2021/03/09(火) 09:28:02.71ID:HJK4uNxM
NTFSはUCS-2で、windowsがUTF-16
それをわざわざcp932に変換して寄越す
972デフォルトの名無しさん
2021/03/09(火) 10:42:13.66ID:4CK4kuWA
NTFSもUTF-16だと思うよ。
973デフォルトの名無しさん
2021/03/09(火) 10:44:51.95ID:SbXzcieK
>>968
> コマンドプロントの努力だけではどうしようもない。

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

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

制約つーか、むしろ互換維持とかただ昔のままほったらかしとかやろ。w
974デフォルトの名無しさん
2021/03/09(火) 10:56:11.55ID:SbXzcieK
>>971
そのおかげで、20年以上昔からふつうにWindowsで使えてきたわけだからしゃあない。
むしろありがたかった話。
975デフォルトの名無しさん
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 は欲しい
976デフォルトの名無しさん
2021/03/09(火) 20:18:30.71ID:BijZjsz/
正規表現のパターンの中に変数を書くとおかしくなりますが、どうしたらいいでしょうか。

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

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

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

どう書いたらいいでしょうか?
977デフォルトの名無しさん
2021/03/09(火) 20:28:25.57ID:HJK4uNxM
なんで ] だけエスケープしてるの?
978デフォルトの名無しさん
2021/03/09(火) 20:34:49.51ID:nUvu3sQ4
そういうときの為のqrですよ
979デフォルトの名無しさん
2021/03/09(火) 20:36:21.19ID:XI91xcQL
[]内は文字セットだからその$は行末マッチじゃないし
980976
2021/03/09(火) 22:41:12.95ID:BijZjsz/
色々やって混乱して間違った事を書いていました。
やりたいことは >>976 の通り。
>>979を見てそれならばと「$pat = "hoge,{0,1}\$"」と書いたら目的を達成できました。

お騒がせしました。
981デフォルトの名無しさん
2021/03/09(火) 22:43:46.86ID:HJK4uNxM
{0,1}って?と等価だよね
982デフォルトの名無しさん
2021/03/09(火) 23:03:58.63ID:B0uPByTP
>>980
hoge,xxxx
にはマッチしないが、ええんか?
>>976の目的と違うで。
983デフォルトの名無しさん
2021/03/10(水) 02:28:31.13ID:ixLG+AYE
hoge(,|$)

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

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

まだ試してませんが、教えていただいたやり方でチャレンジしてみます。
986532
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
987デフォルトの名無しさん
2021/03/11(木) 14:27:02.78ID:IdZJgmDv
もしかして
¥bhoge¥b
がよかったんじゃないの?
988デフォルトの名無しさん
2021/03/11(木) 14:37:57.64ID:l5V9NIZG
splitをうまく使うと解決したかも
989デフォルトの名無しさん
2021/03/20(土) 13:47:35.09ID:UD6ZNZG9
990デフォルトの名無しさん
2021/03/20(土) 13:51:21.40ID:UD6ZNZG9
Python勉強中

print('梅')
exit()
991デフォルトの名無しさん
2021/03/20(土) 17:31:10.22ID:ql2G31oz
【モダン推奨】Perlについての質問箱 50箱目
http://2chb.net/r/tech/1327110999/
992デフォルトの名無しさん
2021/03/21(日) 17:34:20.99ID:2t2VtxHB
993デフォルトの名無しさん
2021/03/21(日) 17:36:32.63ID:dkvLNxnd
994デフォルトの名無しさん
2021/03/21(日) 17:39:12.82ID:2t2VtxHB
うぜ
995デフォルトの名無しさん
2021/03/21(日) 21:54:16.28ID:6DoINzzO
2年で消化 人気スレじゃねーか
996デフォルトの名無しさん
2021/03/22(月) 01:23:08.94ID:rCEIiEgY
うめ
997デフォルトの名無しさん
2021/03/22(月) 23:39:18.97ID:rCEIiEgY
998デフォルトの名無しさん
2021/03/22(月) 23:39:30.86ID:rCEIiEgY
999デフォルトの名無しさん
2021/03/22(月) 23:40:13.68ID:rCEIiEgY
質問いいですか?
1000デフォルトの名無しさん
2021/03/22(月) 23:41:34.32ID:rCEIiEgY
おしまい
-curl
lud20241227031355ca
このスレへの固定リンク: http://5chb.net/r/tech/1548981877/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「Perlについての質問箱 64箱目 YouTube動画>8本 ->画像>5枚 」を見た人も見ています:
Perlについての質問箱 65箱目
【古典的モダン】Perlについての質問箱 51箱目
??何でも質問箱??43箱目??
??何でも質問箱??43箱目??
??何でも質問箱??43箱目??
TAKARAZUKA SKY STAGEについての質問を答えるスレ
沖縄県の米軍機の事故についての質問に自民党議員がヤジ「それで何人死んだんだ」
【初心者歓迎】最新COBOLについての質問スレ
【白宝箱】Ver4装備ドロップについて語るスレ 3箱目
【白宝箱】Ver4装備ドロップについて語るスレ 13箱目
【白宝箱】Ver4装備ドロップについて語るスレ 15箱目
【白宝箱】Ver4装備ドロップについて語るスレ 7箱目
【白宝箱】Ver4装備ドロップについて語るスレ 10箱目
【白宝箱】Ver4装備ドロップについて語るスレ 24箱目
【白宝箱】Ver4装備ドロップについて語るスレ 4箱目
【白宝箱】Ver4装備ドロップについて語るスレ 18箱目
【白宝箱】Ver4装備ドロップについて語るスレ 22箱目
【白宝箱】Ver4装備ドロップについて語るスレ 19箱目
ストレスのゴミ箱 4箱目
【白宝箱】Ver4装備ドロップについて語るスレ 6箱目
【白宝箱】Ver4装備ドロップについて語るスレ 21箱目
【白宝箱】Ver4装備ドロップについて語るスレ 23箱目
バネに関する運動について質問です
映画製作の投資について詳しい人に質問
昨日化学のmolについて質問した者だがまだ理解できない
遁甲質問箱
臨時召集についての質問
ラーメン屋の店長やけど、平素お世話になってる皆様に料理についてプロとしてご教授致します。ご質問があったら何なりとどーぞm(__)m
東進衛星についての質問
ユバの徴についての質問です
インフラの概念についての質問スレ
会場、会場周辺などの情報についての質問など
香水・香りについての総合質問スレ 20
PC周辺機器(大容量HDD)についての質問です
いつかの神職だけど神社についての質問ある?
初心者・創作文芸についての質問スレッド
総合!革靴についての質問スレッド 40足目
香水・香りについての総合質問スレ 14
香水・香りについての総合質問スレ 22
総合!靴についての質問スレッド 37足目
シティヘブンネットについての質問 ★4
総合!靴についての質問スレッド 39足目
コンサート・ライブ会場 座席についての質問スレ
真女神転生Vnocturneについての質問(急募)
タイムトラベルが引き起こす事象についての質問
偏差値30台から国立受かったけど勉強についての質問に答えるよ
▼▲▼▲▼▲ 競輪についての質問スレ 22▼▲▼▲▼▲
▼▲▼▲▼▲ 競輪についての質問スレ 21▼▲▼▲▼▲
聖ヨハネの宗教質問箱
【格闘技】武尊、マギーとの熱愛報道についての質問に笑顔「そっちも激しくて」
【エイプリルフール】石野卓球、ピエール容疑者の薬物使用についての質問に「知りません」と回答
【将棋】藤井聡太四段(15)の対局後インタビューで、終戦記念日についての質問が飛ぶ…「平和な時代ありがたい」と回答
【芸能】奇抜な水着で話題のゆりやんレトリィバァ 闇営業問題についての質問に「ギャグ」で返し続けて批判殺到![07/03] ©bbspink.com
《“羽生世代”か“大谷世代”か》羽生結弦、記者に「1994年代についての質問はNG」と通告 大谷翔平との“相思相愛”に異変 [ネギうどん★]
【海外】テイラー・スウィフト、インタビュアーからの結婚&出産についての質問にお怒り! 「それって男性には聞かないわよね?」
【Webアプリケーション】XAMPP質問箱
ぼるじょあ(・3・)質問箱 セキュ板出張所34
ぼるじょあ(・3・)質問箱 セキュ板出張所33
次の人に質問・要望するスレ 再1
■□■法律に詳しい人に質問■□■
2年の時進研模試偏差値40だったけど現役で慶應法学部に受かった僕に質問ありますか?
数学と物理の勉強方法について質問がある
ストレスのゴミ箱 6箱目
マホトの一人のファンについて質問なんだが…
【白宝箱】Ver5装備ドロップについて語るスレ 29箱目
13:33:29 up 16 days, 14:37, 2 users, load average: 12.81, 10.55, 10.19

in 4.0352630615234 sec @4.0352630615234@0b7 on 013003