2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

Perlについての質問箱 64箱目

23 :デフォルトの名無しさん:2019/02/26(火) 20:42:22.45 ID:RjPoX3nV.net
perl関係ある?

24 :デフォルトの名無しさん:2019/02/26(火) 20:51:34.33 ID:vB+znWqX.net
>>23
ほぼない
けどWeb制作板に行くとエンコードどころか文字コードも理解してなかったから絶対回答こない

25 :デフォルトの名無しさん:2019/02/26(火) 21:02:05.63 ID:c2o2e7e/.net
どうしてもすぐになんとかしたいなら全てをUTF8にする。

26 :デフォルトの名無しさん:2019/02/26(火) 21:32:12.63 ID:tHWhBgwU.net
ほんとにcp932なのか?
実はUTF-8で出力されてて、ヘッダはただ無視されてたりしないのか?

まず、クライアントでデータを保存して、バイナリエディタで確認してみたら?

27 :デフォルトの名無しさん:2019/02/26(火) 22:01:28.20 ID:DhIH/rsp.net
そのような不正な URL がどのように扱われるかを問うのはあまり有意義とは思えない。
適切に扱ってほしいなら適切にエンコードするしかないと思うのだが。
HTML::Element とか URI を使えば簡単だよ。

28 :デフォルトの名無しさん:2019/02/27(水) 00:05:17.07 ID:7T/MRSXz.net
>>26
ほんとにcp932
なのにutf8でエンコードされる
>>27
cgiは、どっかにあるHTMLが書いてあるテキストファイルを読み込んで出力してるだけだから、<IMG SRC="あいうえお.jpg">のあいうえおの部分を見つけ出してエンコードするのは無理がある。
さらにエンコード下として、それをデコードしてパスを通すhttpdと通さないhttpdがあるようなので仕様を知りたい

29 :デフォルトの名無しさん:2019/02/27(水) 02:26:58.26 ID:Hcodp8Vt.net
ホントにそうなら、やっぱブラウザのせいなんかね。
データをデコードしたテキストをそのままURLにしたら、たしかにそうなりそうな気はする。

どうしてもあちこちいじらずに簡単に対処するなら、サーバーのほうはどう?
プロキシとかRewriteとか使って、とにかくURLを受けてしまってから、受けたURLを動的に解釈したら?

30 :デフォルトの名無しさん:2019/02/27(水) 03:01:51.84 ID:7T/MRSXz.net
>>29
もうcp932のファイル名はやめて全部アルファベットにしようと思うのだが、
Rewriteってなんだろう
アニメが出てきたんだが

まあおまえらありがとうな
utf8ならまだしもcp932のファイル名をそのまま使おうとした俺が悪かったんだよきっと
でもwindowsがcp932のファイル名だからしょうがないんだよ

31 :デフォルトの名無しさん:2019/02/27(水) 09:17:13.93 ID:MitD/HmJ.net
>>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.12 ID:HuFKesk6.net
バグる、ですか

33 :31:2019/02/27(水) 12:43:30.58 ID:MitD/HmJ.net
漏れは、web 系の本を、軽く数十冊は読んでるけど、
sjis のファイルを使う本は、見たことがない

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

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

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

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

sjis を使っているのは、ロートルの5ch ぐらいw
だから少しでも、5chのシステムをいじるとバグるから、システムを修正できない!

34 :デフォルトの名無しさん:2019/02/27(水) 13:14:56.19 ID:FWLYBGBg.net
>>30
「RewriteRule」。
# 「httpd」とかいうから、Apacheに詳しいんかと思ってた。

要はとにかく、サーバーがURLを受けてから、それをランタイムで変換して実際のアクセス先を決めることはできるはず、という提案。

35 :デフォルトの名無しさん:2019/02/27(水) 13:19:18.71 ID:FWLYBGBg.net
>>31
URLデコードを禁止できるか?
URLの仕様なのに。
それに、もししたとしたら、CGIの引数とかどうなるんだ?

36 :デフォルトの名無しさん:2019/02/27(水) 14:29:50.58 ID:7T/MRSXz.net
>言語の指定をしていないからじゃないの?
してる

>$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
俺のサーバーじゃないけどそんなこと出来るのか?

37 :31:2019/02/27(水) 15:05:26.60 ID:MitD/HmJ.net
>>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.02 ID:Hcodp8Vt.net
>>36
レンサバでも、管理者だったらいろいろできる。
しかし、もしそうだったとしても、どうやらたぶんおまえにはムリぽなので、もうあきらめろん。

39 :デフォルトの名無しさん:2019/03/02(土) 02:33:03.15 ID:LJe83Rmr.net
>>20-21
ブラウザごとにURLエンコードは統一は取れてなかったと思うよ
まず開発環境としてANHTTPDの使用をやめることをお勧めする
IISかApacheをインストールして使った方がいいと思う

40 :デフォルトの名無しさん:2019/03/04(月) 18:44:25.85 ID:G/cMwSEz.net
https://lavender.5ch.net/test/read.cgi/airline/1551189110/

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

ソースを拡張子.plにして保存、perl実行環境はインストール
ここまでは出来てる
ソースの改造の仕方が分からない

41 :デフォルトの名無しさん:2019/03/04(月) 19:13:42.66 ID:Y5viPS4k.net
連投ツールとか名前が穏やかじゃないから教えない

42 :デフォルトの名無しさん:2019/03/04(月) 19:18:59.22 ID:TpCWsYE8.net
今の5chではスクリプトによる連投はできないのでは?
試したことないのでわからんが。

しかしそのツールなんでわざわざforkして子プロセスに同じことさせてんだろ?その辺がワザなのか?よくわからんね。

43 :デフォルトの名無しさん:2019/03/04(月) 20:43:15.61 ID:q6ai/7VO.net
Perl は初めてかい? まず、Perl の勉強からだね。
何をするプログラムかは後回しにして、何が書かれているかを理解できるようになろう。
書かれていることを理解できるようになったら、使われているモジュールを理解しよう。
LWP を使ってみよう。勉強しなければならないことがたくさんあると気付くだろう。
最低でも HTTP の仕様書くらいは読まないと話にならない。
ここまでできれば最初のソースコードを理解して改造だってできるかも。

44 :デフォルトの名無しさん:2019/03/04(月) 20:47:32.38 ID:Y5viPS4k.net
彼はインストール方法を知りにきただけであってPerlを知りにきたわけではないだろう

45 :デフォルトの名無しさん:2019/03/04(月) 21:07:10.36 ID:9d3FcJ2N.net
メッセージ固定だなんて連投というより荒しツールだな

46 :デフォルトの名無しさん:2019/03/04(月) 21:19:56.49 ID:W5B7ie4G.net
今の2ちゃんは決まったツールでしか投稿できない

47 :デフォルトの名無しさん:2019/03/04(月) 23:55:42.18 ID:TpCWsYE8.net
だよなあ。そのせいでお気に入りの専ブラ使えなくなったし。

48 :デフォルトの名無しさん:2019/03/05(火) 15:13:16.59 ID:opbbmC0J.net
もうC++/Qtで書く気がしない。
Perl/Qtで事足りる。
Perlの開発者が「PCの速度が上ればCである必要はないだろう」みたいな事言ってたけど、
まさにその通りだな。

49 : :2019/03/06(水) 19:01:29.83 ID:pvc8mHD3.net
>>48
その perl は perl6 ですか?

50 :デフォルトの名無しさん:2019/03/06(水) 21:27:34.75 ID:USxtxcs5.net
なんかのはずみで処理が終わらなかったとき、自殺するようにしたいんだけど、

eval {

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

};

これでいいんだっけ?

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

52 :デフォルトの名無しさん:2019/03/06(水) 22:26:52.53 ID:USxtxcs5.net
ありがとう

>evalはいらないと思うけど
よく覚えてないけど、evalはシグナルに対応してないシステムだとエラーで落ちる気がした

53 :デフォルトの名無しさん:2019/03/07(木) 00:21:03.62 ID:pkHUcH4A.net
perlipc を読むといいかも。
http://perldoc.jp/pod/perlipc

54 :デフォルトの名無しさん:2019/04/26(金) 17:48:05.44 ID:T3sMMsV1.net
Perl News に "Fork yeah!" というのがあってちょっと驚いた。
https://www.perl.com/article/fork-yeah-/

55 :デフォルトの名無しさん:2019/04/29(月) 00:48:49.16 ID:OgUfT4lW.net
メアド用にさくらインターネットのライトプラン(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.78 ID:EAhXUlQz.net
「core は出来るだけ小さく」
「CGI はもはや Web の主流ではない」

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

そもそもさくらレンタルサーバーで使える perl って 5.8 〜 5.14 ぽいけど
ttps://help.sakura.ad.jp/hc/ja/articles/206053142#ac05

57 :デフォルトの名無しさん:2019/04/29(月) 01:57:14.83 ID:OgUfT4lW.net
>>56
どもども
その理由なら安心ですわ
perlのバージョンは確認したんだけど、消えた理由によっちゃ使うの気持ち悪いなーと思ったので
どもでした。

58 :デフォルトの名無しさん:2019/05/21(火) 19:09:48.73 ID:ItBIHcGN.net
5.30が出るのかと思ってたら、出てねー

やる気ねーのかよ

59 :デフォルトの名無しさん:2019/05/21(火) 21:00:16.28 ID:BVi2WQ22.net
ていうかこんなに長くアップデートが続いていることだけでもかなり凄い事だと思う。

60 :デフォルトの名無しさん:2019/05/21(火) 22:12:45.42 ID:vpg4l/5q.net
5.30.0 RC2までは出てるからそのうち出るだろ

61 :デフォルトの名無しさん:2019/06/01(土) 02:23:48.95 ID:4bbBO9Ct.net
$str =~ /$pattern/
みたいなことはできるけど、
$str =~ /$pattern/$opt
みたいにして大文字小文字を同一視するかどうかを動的に指定したい
if文で処理行を分けるしか無理?

62 :デフォルトの名無しさん:2019/06/01(土) 04:41:47.86 ID:uuPo6pHP.net
>>61
eval 使えばいいのでは?

63 :デフォルトの名無しさん:2019/06/01(土) 08:47:17.23 ID:GQlgchjf.net
Ruby では、Regexp オブジェクトで、動的に作れる

str = "aB"
opt = Regexp::IGNORECASE

p re = Regexp.new( str, opt )
#=> /aB/i

64 :デフォルトの名無しさん:2019/06/01(土) 10:32:32.69 ID:uuPo6pHP.net
パターンマッチの直前で比較対象の文字列を uc() 使って小文字を全て大文字に変換しておく、または lc() で大文字を全て小文字にしておく事でも実現できるな。
パターンの方にも変換必要になるかも知れないが、それについては予め大文字または小文字でパターン作っておけば回避できる。

65 :デフォルトの名無しさん:2019/06/01(土) 10:33:06.85 ID:4bbBO9Ct.net
ただ、どう考えても遅くなるよな
素直に切り替えよう

66 :デフォルトの名無しさん:2019/06/01(土) 11:42:41.31 ID:UESmRH3l.net
>>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.64 ID:4bbBO9Ct.net
(?i)と書いておけばいいだけか
じゃあもう実装済みで、使う側でどうにでもできる

68 :デフォルトの名無しさん:2019/06/01(土) 13:34:35.95 ID:zyIO0HLx.net
Python ってダサいよね。

69 :デフォルトの名無しさん:2019/06/13(木) 09:38:18.19 ID:8EHJsjb3.net
Pythonはほどほどの長さのスクリプト言語としてならアリなんだが
ツールとしては良くも悪くも電卓だなぁ

70 :デフォルトの名無しさん:2019/06/14(金) 01:28:05.42 ID:TwyiKBjF.net
バッチは使いやすさでperl、サーバだと今はパフォーマンスで選んでgolangやろうとしてるわ

71 :デフォルトの名無しさん:2019/06/14(金) 21:23:40.01 ID:GJHBGGzo.net
https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00682/061100007/
Pythonはコードが書きやすい?ご冗談でしょう

72 :デフォルトの名無しさん:2019/06/14(金) 23:12:24.97 ID:oN4k2Se6.net
>>71
読んだけど、実際にはタイトルほどPythonを悪くいってないな。w

73 :デフォルトの名無しさん:2019/06/16(日) 10:31:31.41 ID:Q48cejx2.net
windowsでreaddirするとcp932で読めてくる

それだと面倒なので、opendirする時か、ハンドラに対して、
decoding(cp932) みたいに指定するにはどうすればいい?

74 :デフォルトの名無しさん:2019/06/16(日) 14:26:37.09 ID:bI4lsVP6.net
https://www.javadrive.jp/perl/file/index12.html

75 :perltidy バグってない?:2019/06/28(金) 03:27:32.11 ID:yOZUOG90.net
perltidy -pbp -nola perl_file
この -pbp は perl best practices にする設定になっている
という仕様が書かれているが

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

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

これバグだよな?

76 :バグもういっこ:2019/06/28(金) 03:37:53.64 ID:yOZUOG90.net
https://i.imgur.com/YlNx4as.png
左のように綺麗にまっすぐ整えろ が本の通りなのに
右のように変なところにいく

77 :デフォルトの名無しさん:2019/06/28(金) 05:48:53.09 ID:MYNfkfjj.net
何語?

78 :デフォルトの名無しさん:2019/06/28(金) 14:53:22.61 ID:oMWPNRS2.net
perl にインデントを求めるな。

79 :デフォルトの名無しさん:2019/06/29(土) 00:24:21.75 ID:YzN8MsSb.net
\(^o^)/

80 :デフォルトの名無しさん:2019/06/29(土) 05:53:24.17 ID:3U68S2mZ.net
どうでもインデント

81 :デフォルトの名無しさん:2019/06/29(土) 15:13:13.34 ID:3U68S2mZ.net
sjisでローマ数字のUが書いてあるのをutf8にすると、どうやっても化けるな

82 :デフォルトの名無しさん:2019/06/29(土) 15:18:34.74 ID:3U68S2mZ.net
一旦生で読んでcp932でデコードすればいいのか
LWP:Simpleだとそのへんに手が出せない

83 :デフォルトの名無しさん:2019/06/29(土) 17:02:36.85 ID:o1VtcfU0.net
MySQLもそうだけど、sjisは使っちゃイカンやろ。
細かいところで文字の置き換えルールがメチャクチャだったような。

いわゆるシフトJISはとにかくcp932で。

84 :デフォルトの名無しさん:2019/06/29(土) 17:53:32.74 ID:3U68S2mZ.net
多分htmlに俺はsjisだと書いてあると、LWPが勝手にsjisでデコードするんだろう

85 :デフォルトの名無しさん:2019/07/06(土) 10:10:18.37 ID:oMEfEQKE.net
元がeuc-jpだと、
$str =~ s/\x{301c}/〜/g;
みたいなことを明示的に書かないと、回避できないみたい
同じものやがな

86 :デフォルトの名無しさん:2019/07/12(金) 02:22:50.96 ID:AjCqo1Mf.net
下記のコードですがダブルクォートを介さずに$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.65 ID:gPQuYcbX.net
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.94 ID:yXcDIkyu.net
print eval qq/"$test\n\n"/;

89 :86:2019/07/12(金) 07:58:26.24 ID:AjCqo1Mf.net
ありがとうございます!

90 :デフォルトの名無しさん:2019/08/11(日) 05:06:35.55 ID:GTeyRs5o.net
こんな書きかたあったか?
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.88 ID:GTeyRs5o.net
()で配列とみなしたとき
()[0]は定義されていると考えて
()[1]などは未定義で無しというトリックか

92 :デフォルトの名無しさん:2019/08/11(日) 05:42:32.38 ID:GTeyRs5o.net
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.54 ID:GTeyRs5o.net
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.45 ID:1t9yEA1l.net
今はもう (1)[1] が空リストにならないんだな。perl5220delta に書いてあった。
リストコンテキストでの問題を避けるために
[split( /::/ , $class)]->[4]
みたいな書き方をしていたんだが。
いや、これは変えなくていいのか。

95 :デフォルトの名無しさん:2019/08/12(月) 10:16:24.43 ID:BBJuWfXI.net
undefは省力とかフェールセーフ的に有効にするんじゃなくて、
厳密に仕様化して積極的に使うべきだよな

初期化されてないものを使うのが気持ち悪いと感じるのは、
auto変数が本当に領域確保するだけだった頃の名残り

96 :デフォルトの名無しさん:2019/09/14(土) 11:56:42.38 ID:MMNKizJk.net
簡単なシェルスクリプトしか書けない素人ですがPerlの利点ってどこです?
grep -Pやperl -peで世話にはなっていますが目当てはあくまで正規表現だけですし
比較演算子はbashと逆だし変数は記号で使い分けなきゃならんしなんだこいつってなって

97 :デフォルトの名無しさん:2019/09/14(土) 12:00:19.76 ID:JUmWdv2U.net
どこでも使える

98 :デフォルトの名無しさん:2019/09/14(土) 23:46:33.57 ID:n7pzU9md.net
テキスト処理に特化されているところ
そのおかげで "," や " " とかの部分を q(,) q( ) などと書けたり
perl コードが正規表現と一体化していて再帰も扱えたりなど色々あるが
全部特化したことによる利点

99 :デフォルトの名無しさん:2019/09/14(土) 23:58:57.25 ID:SgsUVSB1.net
Perl6使ってる香具師さんいますか?

100 :デフォルトの名無しさん:2019/09/15(日) 00:02:41.49 ID:epz106Yo.net
bashで凝ったことを書くことを考えたら、Perlのほうがはるかに簡単。
bashは所詮シェルなので、クォートとかエスケープとか変数とか関数とか、いちいちワナが多いからな。

101 :デフォルトの名無しさん:2019/09/15(日) 17:56:28.72 ID:riyG3w3b.net
Perlの利点?
他の言語と同様になんでもできることかな。モジュール色々使うと作るの楽だしOSの違いもかなり吸収されてWindowsでもLinuxでも何も変更せずに動くプログラムも作れる。

シェルスクリプトも外部コマンド動かせば何でもできるとは言えるが、起動のオーバーヘッドの問題や起動しているコマンドの仕様が変わったときに個別に対応しなければいけないなど面倒な事がある。

102 :デフォルトの名無しさん:2019/10/23(水) 15:22:28.55 ID:Q75cL8J3.net
>>101
> OSの違いもかなり吸収されてWindowsでもLinuxでも何も変更せずに動くプログラムも作れる。
これでとんでもない目に遭ったぞ。
perlの\nは、内部的にはLF のみだが、OSがWindowsなら、出力する際に
CR+LF に自動的に変換してくれる。
しかし、出力文字コードがutf16le だと、特殊な宣言文を書かない限り、
LF (0x000a)は 「0x000a000d」ではなく、「0x000a0d」に変換され、
ぐちゃぐちゃに文字化けする。

文字化けの原因を特定し、回避方法を見つけるために、ずいぶん時間を取られた。

103 :デフォルトの名無しさん:2019/10/23(水) 15:31:23.16 ID:7+59i/z7.net
chcp 1200でいけそうな気がするんだけど

104 :デフォルトの名無しさん:2019/10/23(水) 17:37:45.28 ID:azQS8Nqn.net
>>102
\n は他の言語でも気を付けた方が良い。
例えC言語だったとしても歴史的な事情でライブラリが勝手に変換するかも知れない。
この頃はそれにまつわるバグは減ってるとは思うけどね。

ま、少なくとも \n を \x0a だと信じ込んで使うのは止めた方がいいだろうな。
\x0a はあくまでも \x0a と書いた方が良い。
Javaとかでは改行は System.out.println() を使って改行させるようにして \n を埋め込んでの改行は極力避けた方が良い。

105 :デフォルトの名無しさん:2019/10/24(木) 00:15:31.72 ID:dNYiTPCj.net
>>102
いや、特殊な宣言文ってなんだよ。PerlIO の man 読めよ。
open 関数や binmode 関数の説明にも「PerlIO を読め」って書いてあるよ。

106 :デフォルトの名無しさん:2019/10/24(木) 00:54:14.51 ID:NQorbS3o.net
s/\n//g;
s/\r//g;
俺は常にこうしてる

107 :デフォルトの名無しさん:2019/10/24(木) 06:24:46 ID:rCe9ez9s.net
\nを埋め込んだ箇所が一つでもあったらアウト
みたいな作り方は絶対失敗する

108 :デフォルトの名無しさん:2019/10/24(木) 08:28:21.30 ID:wmDm31X8.net
>>106
s/\R//g;
じゃないのか?

109 :デフォルトの名無しさん:2019/10/24(木) 09:04:15.10 ID:LjTGtkP8.net
>>105
> いや、特殊な宣言文ってなんだよ。PerlIO の man 読めよ。

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

binmode STDOUT => ":raw:encoding(utf16le):crlf";

110 :デフォルトの名無しさん:2019/10/24(木) 22:37:27.00 ID:rCe9ez9s.net
右から読むんだよ

111 :デフォルトの名無しさん:2019/11/06(水) 01:45:01.50 ID:yvB3xxPc.net
消費税計算(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.98 ID:normnvJW.net
>>111
バグじゃなくて仕様やろ。
Perlの数値型はdoubleなので、1.1が正確に表現できてないんちゃう?
浮動小数点数の誤差についてぐぐれ。

113 :デフォルトの名無しさん:2019/11/06(水) 03:29:15.89 ID:normnvJW.net
>>111
おせっかいかもだがもうひとつ。
その手の誤差を回避するのは、ロジックでなんとかできることもあるが、実際にはなかなか難しいはず。
たまたま誤差が見えなくなってるだけの可能性もありそうなので、動作確認は慎重にな。

ちゃんとやるなら、decimal的なモジュールを使ったほうが。
あるかどうかは知らんけど。

114 :デフォルトの名無しさん:2019/11/06(水) 03:46:51.16 ID:QwLiS9cf.net
>>111
バクではなく仕様。
ちなみにPython,Tclで確認してみましたが同じ出力結果になりました。

どんな言語でも金額の計算や小数点の桁を調整をする場合、
int(切り捨て)、round(四捨五入)、ceil(切り上げ)などで処理するか、
出力時に、printfやsprintfを使って、"%.0f"などを指定して桁を合わせる
必要があると思います。

115 :デフォルトの名無しさん:2019/11/06(水) 03:51:32.22 ID:ZoqI13Ph.net
あるよ
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.53 ID:dfSHCt1W.net
浮動小数点の問題は知っていたが、こうなる事は初めて知った。危ないもんだな。

$c = $a / $b; # $c = 500
$e = int($c); # $e = 499

117 :デフォルトの名無しさん:2019/11/06(水) 09:28:51.28 ID:i85ttsqs.net
>>111
それはバグではないし、昔々からある超有名な仕様。知らないのはお前だけ。

118 :デフォルトの名無しさん:2019/11/06(水) 10:08:35.95 ID:yvB3xxPc.net
>>112
>>113
>>114
>>117
仕様で他の言語でもあるのですね。Perlで明示的な型指定とかはほぼ考えたことが無かった(1.08の時は意図した結果が得られていた)ので、勉強してみます。
ありがとうございます。

119 :デフォルトの名無しさん:2019/11/06(水) 10:29:25.24 ID:i85ttsqs.net
言語というよりはライブラリやCPUの問題だ。
しかしだいたいのメジャーな言語が採用しちゃってるので言語に関係なく出ると思って良い。

120 :デフォルトの名無しさん:2019/11/06(水) 17:59:53.94 ID:j94j+HrP.net
言語仕様っていうと違和感あるね
意図してこうしてますって感じで
IEEE 754の仕様といえばそうなのかもしれんがあれは規格であって
仕様とはまたニュアンスが違う なんつーか実数扱うときはそんなもんという感覚

121 :デフォルトの名無しさん:2019/11/06(水) 18:58:09.30 ID:yvB3xxPc.net
>>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.05 ID:yvB3xxPc.net
$c = ;

この行余計でした

123 :デフォルトの名無しさん:2019/11/06(水) 19:44:41.92 ID:mEOqpT9o.net
>>120
C/C++なら規格が精密なのでそういう違和感もわかるが、Perlの場合は逆におかしいやろ。w

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

ちなみに、今回のケースなら、$x/1.1とするのではなく、$x*100/110としたほうが安定しそう?

125 :デフォルトの名無しさん:2019/11/06(水) 20:39:05.70 ID:yvB3xxPc.net
>>124
うちは税込ものを分離する時は消費税側で小数点以下切り捨てなのでOKなのです
四捨五入とか会計方針によっては稀に問題が出るかもしれませんね

126 :デフォルトの名無しさん:2019/11/06(水) 21:15:49.18 ID:i85ttsqs.net
1.1を掛けるなら11を掛けてから10で割った方が良いかもな。そうすると正数計算でやれる。
切り上げや四捨五入をしたい場合は10で割る前に一桁目を見て10を足したり足さなかったりすれば良い。

127 :デフォルトの名無しさん:2019/11/06(水) 21:18:49.26 ID:i85ttsqs.net
ああ。逆か。税込みから本体と税を求めるのか。でも考え方は同じだな。

128 :デフォルトの名無しさん:2019/11/07(木) 00:06:59.16 ID:gr4VkOsJ.net
>>125
違うぞ。今回の問題点をちゃんとわかってるか?
1.1と書いたリテラルが、実際の値は1.10...となっていて、1.1よりも大きかったことだぞ。

誤差の具合によっては、正確には切り捨てが不要な値でも、除数が大きいせいで計算結果が実際よりも小さい値になってしまって、してはいけない切り捨てが発生してしまう可能性はないんかね。

129 :デフォルトの名無しさん:2019/11/07(木) 00:07:26.65 ID:gr4VkOsJ.net
>>126
>>124

130 :デフォルトの名無しさん:2019/11/07(木) 01:08:34.48 ID:q6f07NqD.net
>>128
消費税は小数点を使わず整数計算で
10 /110
8 / 108
で計算するようにします

アドバイスありがとうございます

131 :デフォルトの名無しさん:2019/11/07(木) 01:12:13.17 ID:q6f07NqD.net
>>128
うちの会社ではあんなに国家予算並みにたくさん「0」が出てくる消費税計算は無いのでとりあえずの回避でも大丈夫です
とはいえ先ほどのように整数計算に修正しようと思います

132 :デフォルトの名無しさん:2019/11/09(土) 10:00:40.69 ID:q+fGPpet.net
どちらにせよ、小数点以下をどう扱うかは仕様で決めないとダメだな。

133 :デフォルトの名無しさん:2019/11/14(木) 22:54:58.33 ID:cMIrVE8k.net
ファイルハンドル($fh)からファイル名を取得する方法ってありますか?
・stat $fhでinode取得してシェルのfindで見つけるってのはコストかかるのでやりたくない。
*{$fh}{IO}辿ってIO::Fileから得られないかなって調べたんですけど分かりませんでした。
基本的にそういう思想がないってことかも知れません。

134 :デフォルトの名無しさん:2019/11/15(金) 00:28:22.57 ID:WAwhq9DE.net
ムリやろ。
ファイル名のないファイルハンドルも少なくないしな。

135 :デフォルトの名無しさん:2019/11/15(金) 12:49:10.35 ID:qkK0C17l.net
ファイルハンドルからファイル名を求めるシステムコールとかもないしな。
ハードリンクされてて1つのi-nodeで複数のファイル名を持ってたらどうすんのっていう問題もある。

自分の作ったプログラムの中だけでいいならそのプログラム内だけの独自のopen,close作ってそこでファイル名を保持しとけば良いんじゃないかな。

136 :デフォルトの名無しさん:2019/11/15(金) 22:37:17.80 ID:9LSwivmi.net
お二方ありがとう
そもそもそういう使い方をするものではないって理解しました

137 :デフォルトの名無しさん:2019/11/17(日) 00:22:07.56 ID:+/PgA3gU.net
そもそもファイルをopenした時点で、ファイル名は自明だろ、、、
<>の場合は、今開いているファイル名は、$ARGVでアクセス出来るし、、、
while(<>){ print $ARGV if $. == 1 ; $. = 0 if eof }

他は、自分でコード書くんだからファイルリストの管理すりゃいいだけの
話だし。

138 :デフォルトの名無しさん:2019/11/17(日) 00:47:01.26 ID:7P3Fm4Oa.net
>>137
ファイルハンドルだけもらうクラスかもよ

139 :デフォルトの名無しさん:2019/11/17(日) 01:44:18.01 ID:cO7DNsZu.net
いや、気持ちはわかるやろ。
ファイルハンドルは、しょせんハンドルでしかないと納得するのは、事情がある程度わかってからなんだから。

140 :デフォルトの名無しさん:2019/11/17(日) 07:47:40.51 ID:bNRHw2eJ.net
ファイルハンドルをインクリメントすると次のファイルを指すハンドルになることはあまり知られていない。

141 :デフォルトの名無しさん:2019/11/17(日) 12:07:49.00 ID:Ew4nGi4g.net
>>140
それは、Perlのファイルハンドルの話か?
Cのファイルポインタではなく?

142 :デフォルトの名無しさん:2019/11/18(月) 08:50:22.41 ID:4tmHvePg.net
ActivePerl 5.22 から 5.28 にアップデートしたのだが、
次のものがなくなってしまって、とても不便になった気がする。
・PerlEz.dll
・ppm(perlパッケージマネージャー)
・htmlドキュメント

他の2点はいいとしても、PerlEz.dllが無いと生きていけないので、
5.22 に戻した。もう一生5.22 を使い続けることになるのかな。
なぜ、こんな事をするのだろうか?

143 :デフォルトの名無しさん:2019/11/18(月) 20:45:39.28 ID:2uYwgX87.net
Strawberry Perl 使えよ

144 :デフォルトの名無しさん:2019/11/22(金) 22:32:44.69 ID:G0qxcoi/.net
そういやみんな最新の安定版使ってんの?
うちは5.20で止めてる。特に意味はないんだけどこれが安定してるってどこかで見たから。

145 :デフォルトの名無しさん:2019/11/22(金) 23:56:39.64 ID:0hNsLKVA.net
5.16.3だな
多分意味は無い

146 :デフォルトの名無しさん:2019/11/23(土) 00:04:49.15 ID:pA1s2lMR.net
俺もCentOSのデフォルトだわ
5.16.x
もう枯れてるしね

147 :デフォルトの名無しさん:2019/11/23(土) 00:20:10.52 ID:FBMqwUlj.net
ずっと5.8.9のままだわ
とにかく安定している

148 :デフォルトの名無しさん:2019/11/23(土) 01:08:20.02 ID:uP8OeUg3.net
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.48 ID:0LKgjFg3.net
5.30.0
なるべく最新の安定版を追っかけてる

150 :デフォルトの名無しさん:2019/11/23(土) 02:19:04.46 ID:En+bKilB.net
>>148
STDERRにprintすれば?

151 :デフォルトの名無しさん:2019/11/23(土) 10:12:25.15 ID:Dim3LBiC.net
perl5.26.1
perl2exe 使うので。

152 :デフォルトの名無しさん:2019/11/24(日) 00:31:51.83 ID:jceUCsgs.net
>>150

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

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

153 :デフォルトの名無しさん:2019/11/25(月) 10:33:31.52 ID:veETdbiQ.net
>>152
-i があるからでは?

-i.bak とかやっとくと .bak をファイル名に付加したバックアップ作れるよ。
多分新規ファイル開いてそちらに出力して後でリネームして元ファイルのバックアップを取ろうとしてるんだろうと思う。
-i の直後に何もない場合はバックアップ取らずに元ファイルにリネームだけやってるんだと思う。

154 :デフォルトの名無しさん:2019/11/26(火) 23:14:08.94 ID:EA1DZQ5h.net
>>153

コメントありがとうございます。
今回やることはファイルに上書きしたくバックアップもいらなかったので -i で良いかなと思っていました。
ワンライナーはよくお世話になってるのですが、今回-sでperl内に変数として渡せることがわかり、ますます重宝しそうです。

155 :デフォルトの名無しさん:2019/11/30(土) 17:02:59.68 ID:hCKH6fU7.net
今日、学んだこと。

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

/^([a-c])\1\1/
と同じではなかった。

156 :デフォルトの名無しさん:2020/02/01(土) 09:03:36 ID:qxbFBKGD.net
パターンの中で\1って使えるんや…
正規表現って普通「事前に」FSMにコンパイルされてからマッチングに使うるんじゃないの…?
バックトラックとかする高度な実装のやつはまた違うんかね

157 :デフォルトの名無しさん:2020/02/01(土) 13:27:18 ID:wtOh7v6m.net
>>156
¥1は、むしろパターンの中でしか使わない。外で使うときは$1のほう。
正規表現は、バックトラックがあたりまえ。しない実装なんかあるか?

いろいろ勘違いしてるぞ。

158 :デフォルトの名無しさん:2020/02/02(日) 08:34:53 ID:7b/FZYuN.net
>>157
話が通じなさそうで大変よろしい

159 :デフォルトの名無しさん:2020/02/02(日) 13:46:05 ID:9cWLJdKQ.net
s/(pattern)/\1/
という使い方をするもんだと思いこんでいて、謎のバグに悩んだ

160 :デフォルトの名無しさん:2020/02/04(火) 19:17:18 ID:64ds8brY.net
perl hacks買った
送料込み300円

161 :デフォルトの名無しさん:2020/02/04(火) 19:49:23 ID:53yGrLtS.net
買われてしまった。
モダンperl入門でも買おうかな

162 :デフォルトの名無しさん:2020/02/05(水) 00:34:08.21 ID:Yyzz6n+F.net
今さら「モダン」もないやろ。w
どうとでも好きに書いたらええがな。

163 :デフォルトの名無しさん:2020/02/05(水) 04:02:23 ID:rxl56Lqp.net
モダンとか死語だもんな
そういうワード使うしかなかった当時の状況もあるけど

164 :デフォルトの名無しさん:2020/02/05(水) 17:51:27 ID:9nK7Yle0.net
死語かなあ?

165 :デフォルトの名無しさん:2020/02/05(水) 21:33:12 ID:SZWAnwkp.net
>>156
決定性有限オートマトンと非決定性有限オートマトンについて調べるといいぞ。
lex は前者で Perl は後者だ。

166 :デフォルトの名無しさん:2020/02/05(水) 22:58:10 ID:TkSDhbEE.net
そういやモダンperl入門の新刊どうなった?

167 :デフォルトの名無しさん:2020/02/05(水) 23:00:15 ID:TkSDhbEE.net
2014年1月予定か。たのしみやで。

168 :デフォルトの名無しさん:2020/02/06(木) 00:10:26.01 ID:UIZEnib+.net
perlの最新本って、これくらいだろ
初めてのPerl 第7版 2018/01/20
Effective Perl 第2版 2015/02/17

169 :デフォルトの名無しさん:2020/02/06(木) 00:14:16.79 ID:m/3X75FJ.net
クリスマスまでにはperl6の本が山のように出版されるからな

170 :デフォルトの名無しさん:2020/02/06(木) 00:24:20 ID:T14/xjtC.net
ドラマ「3000回目のクリスマス」

171 :デフォルトの名無しさん:2020/02/06(木) 00:30:59.99 ID:6QnB4wyK.net
Perl6無くなったんじゃなかったっけ?

172 :デフォルトの名無しさん:2020/02/06(木) 14:10:21 ID:EPBtHi1S.net
ちっちゃくRakuって書くんじゃない?

173 :デフォルトの名無しさん:2020/02/10(月) 22:55:04.23 ID:hYCIpnsp.net
非決定性有限オートマトンは決定性有限オートマトンに変換できる
ていうか両者の能力は同じ(正規言語止まり

174 :デフォルトの名無しさん:2020/02/10(月) 23:09:15.59 ID:O7nANUNm.net
ゲーデル?

175 :デフォルトの名無しさん:2020/02/11(火) 08:07:12 ID:RnNFx+rl.net
んまーできると言っても状態数の爆発を伴うこともあるので
非決定性有限オートマトンのままにしといて入力が来たときに探索(バックトラック)で解決、
というのもアリっていやーアリ

176 :デフォルトの名無しさん:2020/02/11(火) 17:49:46.25 ID:ix+UlUL8.net
名前変えたんだよね?やっぱ違いがありすぎて紛らわしいから変えたのか?

177 :デフォルトの名無しさん:2020/02/11(火) 17:50:45.15 ID:ix+UlUL8.net
すまん。リロード忘れて間に他の書き込みが挟まった。Perl6の話ね。

178 :デフォルトの名無しさん:2020/02/11(火) 18:26:47.40 ID:FJnR5oDj.net
ロゴもどうなんだ

179 :デフォルトの名無しさん:2020/02/11(火) 22:24:33 ID:kUx05S+X.net
>>176
少なくとも、もうPerlでは無いと言うことだ
Perlの系譜にある別言語だね

180 :デフォルトの名無しさん:2020/02/12(水) 01:53:33 ID:CB9IiDBv.net
YouTuberは「最強の職業」である理由。
https://www.youtube.com/watch?v=XjV3Nb0-hgA
【事例付き】YouTuberは最強の副業である件について。
https://www.youtube.com/watch?v=wB8hNuNVoIw&t=267s
【初心者向け】YouTubeの始め方・稼ぎ方を徹底解説!
https://www.youtube.com/watch?v=YEw-a8qlADM
「YouTubeなんていつか稼げなくなる」という主張を論破する。
https://www.youtube.com/watch?v=VatNILApW4U
収益化から丸1年!YouTubeでいくら稼いだか公開。
https://www.youtube.com/watch?v=-zQxuQqZ5eA&t=103s
その動画で月商○○万!? YouTubeで稼ぐ裏技的アプローチ。
https://www.youtube.com/watch?v=7I4APU_6i9o&t=433s
【貧者の工夫で戦え】ガラケーだっていい。YouTube始めるのにパソコンはいらない!
https://www.youtube.com/watch?v=jYdWfjjzD7Y
【第一回】SNS、YouTube、ブログで稼ぐ方法を、丁寧に解説します!
https://www.youtube.com/watch?v=erNiLOncDnY

181 :デフォルトの名無しさん:2020/02/12(水) 07:13:33 ID:ZjDcS8oe.net
元から別言語定期

182 :デフォルトの名無しさん:2020/02/12(水) 10:59:57 ID:urwrbVLd.net
Python もそのくらいやって欲しい。

183 :デフォルトの名無しさん:2020/02/12(水) 16:01:22.42 ID:SF/q3PcI.net
Rakuは設計当初からオプショナルな型システムあるし
numpyっぽい操作が言語組み込みだったり
いろいろ早すぎた

184 :デフォルトの名無しさん:2020/02/13(木) 01:14:31.03 ID:on7ESczL.net
当初はすごいと思ったけど今見ると糞仕様だな

185 :デフォルトの名無しさん:2020/02/15(土) 12:59:07.78 ID:8m1Cr/X/.net
ハッシュの配列とかも簡単にできるもんね。
perlで作ったプログラムをC++で作り直すと思うとゾッとするw

186 :デフォルトの名無しさん:2020/02/15(土) 14:49:16 ID:av6eWd5V.net
ハッシュの配列とかスクリプト言語の類ならどれも同じようにできる。
Perlがだめなのは、スカラとリストの二つが存在することだな
同じ書き方をしても、使い方で意味が変わってしまう。
変わるだけならともかく違う解釈で動いてしまうからバグのもとに鳴る。

187 :デフォルトの名無しさん:2020/02/15(土) 16:00:24.43 ID:CBuE7ub7.net
>>186
リストは使わずに全部リファレンスでやった方がいろいろ安全だよ

188 :デフォルトの名無しさん:2020/02/15(土) 16:25:27.75 ID:33mO6l2/.net
なるほどそうかもしらん

189 :デフォルトの名無しさん:2020/02/15(土) 18:59:30.30 ID:jU+J++ht.net
$aと@aが区別されるので調子に乗って、
$a->[0][0][0] と一緒に $a も使ってバグる

190 :デフォルトの名無しさん:2020/02/16(日) 20:31:14 ID:7RTwZ9VV.net
まあ、自分で作るには兆便利だけど人のプログラムの修正やメンテはやりたくないなw
やっぱ、C言語ぐらい厳しくないとプロ用は無理だよね。

191 :デフォルトの名無しさん:2020/02/17(月) 00:50:46 ID:qx2LCmQN.net
Cは厳しさが足りない!

192 :デフォルトの名無しさん:2020/02/17(月) 09:02:59 ID:3xf/X3D3.net
他人が書いたものばかりでなく、1年前ぐらいに自分が書いたものを
修正しようとして、「なにやってんの?これ」と思う。
自分自身のために、「しつこいぐらいにコメントを入れる」を心がけてるよ。

193 :デフォルトの名無しさん:2020/02/17(月) 10:26:17 ID:DZOr9dsV.net
それ以前にコメントがなくてもわかるようなコードにしてるよ

194 :デフォルトの名無しさん:2020/02/17(月) 13:13:07 ID:ZZZ2hHJ7.net
マクロなコードは読んで意味がわかるものにするのは当然として
コメントはビジネスロジックと言うか、フローの説明じゃね

195 :デフォルトの名無しさん:2020/02/17(月) 13:17:02 ID:5usMQUGr.net
書いてあることを説明する必要はない。
コメントで書くのは、なぜこんなフローにしたかだ

196 :デフォルトの名無しさん:2020/02/17(月) 13:21:56.88 ID:ZZZ2hHJ7.net
ミクロだわ恥ずかしい(´・ω・`)

197 :デフォルトの名無しさん:2020/02/17(月) 15:20:38 ID:wTmXuXv8.net
一見すると何やってんだか分からなくてもよく辿るとスゲエなこれ天才じゃねって思うことある
自分が書いたんだけどね

198 :デフォルトの名無しさん:2020/02/17(月) 20:40:48 ID:Y4S6wB9m.net
書くのも読むのも全然困らないようなコードしか書かないのが理想

難解な処理は、きっともっとシンプルに解決できる

199 :デフォルトの名無しさん:2020/02/17(月) 22:34:20 ID:qx2LCmQN.net
現実はそうではない。

200 :デフォルトの名無しさん:2020/02/18(火) 20:13:13 ID:55IHv/fO.net
my @result = grep !$temp{$_}++, @list;

凄げーよね、@listをuniqにソートするコードだって。
パールならではだよね。
普通なにしてるかわからんよw

201 :デフォルトの名無しさん:2020/02/18(火) 20:25:02 ID:2VKhUmei.net
それは慣用句なので割と判る
コメントくらい付けるけど

202 :デフォルトの名無しさん:2020/02/18(火) 20:32:09 ID:KQgsUf00.net
result = list(set(LIST))

pythonのほうが圧倒的に簡単

203 :デフォルトの名無しさん:2020/02/18(火) 21:09:43 ID:lAgti/Dg.net
>>200
これでなんでソートされるの?

204 :デフォルトの名無しさん:2020/02/18(火) 21:10:15 ID:Z1cJ/QMX.net
>>200
それじゃあソートできてないだろ

my @result = sort grep !$temp{$_}++, @list;

205 :デフォルトの名無しさん:2020/02/18(火) 21:32:52 ID:v/AIhdlf.net
>>202
sort 使わずに sort できるなんて凄いな。

206 :デフォルトの名無しさん:2020/02/18(火) 21:34:51 ID:55IHv/fO.net
>>203
>>204
ゴメンソートは関係無かった。

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

パッとこのコードが書けるんならいいけど、ここで時間を掛けたくないよね。

207 :デフォルトの名無しさん:2020/02/18(火) 21:48:33 ID:3v1Ek71E.net
普通のfor文で書けばよくね?w

208 :デフォルトの名無しさん:2020/02/18(火) 21:53:35 ID:2VKhUmei.net
機能がはっきりしてるから、sub uniqか何かを作って言語仕様かのように書く
きっと既にあるから、コピペで済む

209 :デフォルトの名無しさん:2020/02/18(火) 22:00:21.17 ID:3v1Ek71E.net
まあ余程の理由がない限り普通はList::Util使うね

210 :デフォルトの名無しさん:2020/02/18(火) 22:14:59 ID:2AC9Ct1n.net
ワンライナーカッケー病なんだろ

211 :デフォルトの名無しさん:2020/02/18(火) 22:20:53 ID:KQgsUf00.net
ハッシュを使ってカウントするなんてperlの定石なんだが
入門書のハッシュ解説で必ず載ってるぞ

212 :デフォルトの名無しさん:2020/02/18(火) 23:17:41.56 ID:aJeTcUgK.net
>>209
普通は>>204でしょ
モジュールは精査して本当に必要なものしか入れない
まあ現場次第だと思うが

213 :デフォルトの名無しさん:2020/02/19(水) 00:10:20.47 ID:XDqysw2e.net
>>200
Rubyだとuniqが使えるが配列の集合演算でもできる。
result = list | []

214 :デフォルトの名無しさん:2020/02/19(水) 00:43:04 ID:6o0SSmsW.net
実装は面白くても実際の所普段の仕事では
わかりやすいインターフェースの関数にするから
そういう点で差はでないというね。

215 :デフォルトの名無しさん:2020/02/19(水) 01:02:36 ID:mEonuRdN.net
>>214
PerlやRubyなら、わざわざ関数にはしないかな。
その場でハッシュにつめてキーだけ使うとかかなりふつうだから。

216 :デフォルトの名無しさん:2020/02/19(水) 01:53:16.69 ID:IHihvCy5.net
ここ人いたんだ

217 :デフォルトの名無しさん:2020/02/19(水) 02:27:13 ID:+yXfQCpG.net
オワコンだとかすたれた言語だとか言われるけどまだまだ使われてるから

218 :デフォルトの名無しさん:2020/02/19(水) 04:28:09.35 ID:UqnCT+lt.net
>>200
いや。わかる。
君もそのうちわかるようになるよ。

219 :デフォルトの名無しさん:2020/02/19(水) 05:39:50.97 ID:6o0SSmsW.net
>>215
そしてコメント書くぐらいなら関数にしろ

220 :デフォルトの名無しさん:2020/02/19(水) 09:01:28.79 ID:pJACNDga.net
他人にわかってもらいたくないんだろう。

221 :デフォルトの名無しさん:2020/02/19(水) 09:31:49.80 ID:oZi5GQ/y.net
ほら、こんなコードで実現できるんやで、
なにやってるか一見わからんやろ
説明しよか?

みたいに言いたくなったら、それは可読性が悪い証拠

222 :デフォルトの名無しさん:2020/02/19(水) 12:23:16.28 ID:CZsThdPw.net
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 ID:/J962Gym.net
perl使い生きてた

224 :デフォルトの名無しさん:2020/02/19(水) 18:36:12.61 ID:X6PQVyJY.net
勉強になるというか、どこで学んだの

225 :デフォルトの名無しさん:2020/02/19(水) 19:52:56.93 ID:SoQYbBiO.net
>>219
書かないから心配するな!
1+1と同じレベルだからな!

226 :デフォルトの名無しさん:2020/02/19(水) 20:07:21 ID:pJACNDga.net
そういう思想の馬鹿しかおらんからperlは廃れたんだよ。

227 :デフォルトの名無しさん:2020/02/19(水) 20:07:27 ID:zh3CM0eN.net
if (defined $table{$var}) {
 $var = $table{$var};
}

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

何かを2回書くのが嫌な時の逃げ方は何だろう

228 :デフォルトの名無しさん:2020/02/19(水) 20:12:42 ID:1DPeZovD.net
リストの要素数を得るために空リストに代入するのも慣用句と読んでいいかな?
$n = (() = <*>);
みたいの。

229 :デフォルトの名無しさん:2020/02/19(水) 21:01:35 ID:zh3CM0eN.net
要素数なんてどうせループにしか使わないので、
そんなのを取得しない解決がきっとエレガント
pythonの何でもイテレータ思想はきっと正しい

230 :デフォルトの名無しさん:2020/02/19(水) 21:35:36 ID:bGX6osz8.net
>>227
これはあるね しばし考えるんだけど結局一時変数を使う
構造によっては$_が使える時もあるんだけどまれだなあ

231 :デフォルトの名無しさん:2020/02/19(水) 21:45:00.08 ID:mEonuRdN.net
>>226
じゃあRubyやらC#やらも滅びるんやな。w

ハッシュのある言語ではあたりまえのイディオムやろが。

232 :デフォルトの名無しさん:2020/02/20(木) 00:34:37 ID:bivTkZxZ.net
まあ最近の言語は便利な標準メソッド呼べば終わりって感じだからね
Perlは標準モジュールの範囲だけでやろうとすると結構面倒

233 :デフォルトの名無しさん:2020/02/20(木) 00:35:55 ID:1VYpL0NG.net
スレに人が来ていてオジサンうれしいよ

234 :デフォルトの名無しさん:2020/02/20(木) 01:29:24 ID:bivTkZxZ.net
最近はPerlのことを喋ると謎の軍団が叩きに来るからな
ネット上で喋れる場所がなくなった
迫害されてる気分

235 :デフォルトの名無しさん:2020/02/20(木) 13:15:43.08 ID:fXEOX4Gg.net
Perl/Tk は使い物にならん。プログラムが大きくなると動かないでやんのw
Perl/Qt を推進していくべき。

ここの人はPerlでGUIを使ったりしてる?

236 :デフォルトの名無しさん:2020/02/20(木) 15:23:29 ID:Gm5IubjH.net
Windows限定だが、Win32-GUIを使ってるよ。
インストールして、次のバッチファイルを走らせると、
細かい具体例のデモが見れる。
C:\Perl\site\bin\win32-gui-demos.bat

237 :デフォルトの名無しさん:2020/02/20(木) 17:36:38 ID:Nllb9nDe.net
>>231
そうではなくて独自の記号にコンテキスト毎に意味を詰め込む様な言語思想のこと言ってるんだがね。

238 :デフォルトの名無しさん:2020/02/20(木) 18:47:26 ID:CqCGFBWH.net
入力も出力もテキストで完結してるのがいい

と思ってたけど、最近excelデータを入出力に使い出した

239 :デフォルトの名無しさん:2020/02/20(木) 20:33:42 ID:0HRLUjae.net
短絡論理演算子を使うという方法もあるが、お気に召すかどうかは知らん。

240 :デフォルトの名無しさん:2020/02/20(木) 20:44:08.31 ID:CqCGFBWH.net
>>227の例だと
$var = $table{$var} or $var
で概ね動くけど、空文字列なんかが入ってた時に誤動作する

判別はdefinedしか無いとして、それでも書ける短絡評価とは

241 :デフォルトの名無しさん:2020/02/20(木) 21:36:24.51 ID:uxa6Suua.net
defined-or使うだけじゃないの?
$var = $table{$var} // $var;

242 :デフォルトの名無しさん:2020/02/20(木) 22:00:38.63 ID:0HRLUjae.net
アンカー入れ忘れたのによく分かってくれたな。ありがとう。

243 :デフォルトの名無しさん:2020/02/20(木) 22:37:06 ID:CqCGFBWH.net
そんな演算子知らん

244 :デフォルトの名無しさん:2020/02/20(木) 23:16:35.88 ID:NRacWxGd.net
null合体演算子は最近の流行りやぞ?

245 :デフォルトの名無しさん:2020/02/21(金) 01:54:46.68 ID:dQ0Yz//t.net
//流行ってる気がしない。
新しい機能を積極的に使う人はそもそもperlを使わないのではないか。
断固外氏のブログのネタにしかなってなさそう。

246 :デフォルトの名無しさん:2020/02/21(金) 02:18:25 ID:YvRUEPlL.net
5.8じゃ使えないからね
それだけで使わない理由になる

247 :デフォルトの名無しさん:2020/02/21(金) 03:26:53.00 ID:6/adwu75.net
細かいけど優先度は// > = > orだよ

248 :デフォルトの名無しさん:2020/02/21(金) 03:54:06.99 ID:6/adwu75.net
>>227と等価なのは>>241
この例はdefinedだったから適用できるのね
判定が任意だとするとやはり2度書くしかないかね 例えば
if ($table{$var} % 3) {
 $var = $table{$var};
}
perlは同一値への参照と解釈して2回読みにはいかないという気の利いたことはしないだろうね
エクセプション入ったら変わる可能性あるしね

249 :デフォルトの名無しさん:2020/02/21(金) 03:58:30.72 ID:6/adwu75.net
//=の逆バージョンあったらいいなとはたまに思うね
そこまで必要性ないという判断でないのだろうけども

250 :デフォルトの名無しさん:2020/02/21(金) 07:05:24 ID:TnPEnehp.net
$table{$var} が $_ に入るような無害な処理をしておいて、
$var = $_ % 3 ? $_ : $var
と等価なシンタックスシュガーで処理する
みたいなことができれば

251 :デフォルトの名無しさん:2020/02/21(金) 09:05:21.00 ID:KvZFDIbR.net
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 ID:PzVMR7sv.net
サブルーチンとか甘え。謎の記号を使って魔法のようなコードを書くのがPerlの醍醐味。可読性は悪

253 :デフォルトの名無しさん:2020/02/21(金) 12:24:11 ID:TKnLlA6x.net
>>235
昔々 Perl/Tk 使おうと思ったが日本語対応が出来てなくて止めたことがある。
それ以来 Perl で GUI はやってない。

254 :デフォルトの名無しさん:2020/02/21(金) 14:01:10.98 ID:OOdvSVAe.net
絶対やらないけど
$_ % 3 and $var = $_ for $table{$var};

255 :デフォルトの名無しさん:2020/02/21(金) 15:45:08.67 ID:ooEapY6E.net
>>253
それ、5.6以前の話?記憶が曖昧だけど、utf8に対応した5.6あたりから、Tkで日本語使えたような気がするけど。

256 :デフォルトの名無しさん:2020/02/21(金) 18:15:13 ID:TKnLlA6x.net
>>255
忘れた。20年ぐらい前だったかな?

257 :デフォルトの名無しさん:2020/02/22(土) 22:24:09.42 ID:pvGxmVZm.net
裏でずっと何かしてるスクリプトを走らせておきたい
ActivePerlのウィンドウが出るのが嫌なので、wperlを起動してウィンドウを出さない
でも、wperlを起動する為のbatファイルのウィンドウがずっと出てる
batファイル以外のいい起動方法はないだろうか

258 :デフォルトの名無しさん:2020/02/22(土) 22:46:33 ID:KpqdZij5.net
>>257
start "" "wperl ..."

259 :デフォルトの名無しさん:2020/02/22(土) 22:47:18 ID:+QQ7ccWr.net
ショートカットでよくね?

260 :デフォルトの名無しさん:2020/02/22(土) 23:01:19 ID:pvGxmVZm.net
wperl以降を""で括ると動かないけど、無くせば動いた
これでサーバ監視ができる

261 :デフォルトの名無しさん:2020/02/23(日) 06:57:52.64 ID:6djC7Yo0.net
Linuxなら何も考えずにできるが・・・

262 :デフォルトの名無しさん:2020/02/23(日) 07:18:43.14 ID:u5LzmB/p.net
pingが通るようにしてしまえばwindowsでもそういうのは既にある

263 :デフォルトの名無しさん:2020/02/23(日) 12:43:19 ID:1MmoNroU.net
>>261
シェルからふつうに起動したら、親プロセスとの関連でトラブルが発生するところはどちらも同じ。
というか、むしろLinuxのほうがわかりにくくてひどい。
disownとかnohupとか知ってるか?

264 :デフォルトの名無しさん:2020/02/24(月) 04:42:11.62 ID:jrwZftYn.net
知ってるよ。

265 :デフォルトの名無しさん:2020/02/25(火) 12:21:34 ID:Z4NIrtJK.net
>>260
何か使い方間違ってない?
次のようなコマンドで、普通に通るぞ。
wperl.exe "C:\utp\foobar.PL" "C:\foo\bar.txt"

266 :デフォルトの名無しさん:2020/02/25(火) 23:35:33.10 ID:Vpd+P02x.net
>>265
>>258

267 :デフォルトの名無しさん:2020/03/05(木) 09:29:31 ID:hJr+GlCd.net
ブラウザでは普通に見られる楽天市場の商品ページ
(item.rakuten.co.jp/shop_mei/a012345/)を get 出来なくなった。
ユーザーエージェントやらリファラはイジってみたけど

268 :デフォルトの名無しさん:2020/03/05(木) 12:43:29 ID:eb4C0HQQ.net
active perl の ppm がなくなっていろんなモジュールが動かないのだが、困ってるの俺だけ?
ググっても誰も文句言ってないな

269 :デフォルトの名無しさん:2020/03/05(木) 12:50:46.42 ID:WFS2X5DF.net
>>268
>>142 でオレが文句を言ったが。
結局、一生5.22 を使い続けることにした。

270 :デフォルトの名無しさん:2020/03/05(木) 14:56:24.55 ID:NI6SkVuR.net
新しめのバージョン追ってる人はもう大半がactive perl捨ててstrawberry perlに移住したんじゃね

271 :デフォルトの名無しさん:2020/03/05(木) 20:36:47 ID:HImUaDHG.net
つい最近ppm使ったような

272 :デフォルトの名無しさん:2020/03/06(金) 00:11:57 ID:Wxp9Lzi1.net
strawberry perl なら cpan インストーラ、もう少しまともに動くのか。
明日、試してみる。

273 :デフォルトの名無しさん:2020/03/06(金) 08:49:13 ID:20KFjtwq.net
https://community.activestate.com/forums/ppm

5.26以前なら、ppmは使えないことはないけど、「保守はしない」ということだね。

274 :デフォルトの名無しさん:2020/03/06(金) 09:25:47 ID:7w4EZP5c.net
>>268
WSLでLinuxそっくり環境の中で普通のPerl使うかOS丸ごとLinuxにしてしまえば悩むことはなくなる。

275 :デフォルトの名無しさん:2020/03/06(金) 13:37:53 ID:OG/dFmOQ.net
macという手も

276 :デフォルトの名無しさん:2020/03/06(金) 13:53:08 ID:YSIXaKl0.net
visual studioインストールして普通にビルドすれば?
Makefileちょっと変更してnmake叩くだけだよ

277 :デフォルトの名無しさん:2020/03/06(金) 18:40:33.19 ID:JNQJmFQ4.net
>>274
MSYS2のがええで。
WSLは別物。

278 :デフォルトの名無しさん:2020/03/06(金) 19:44:20.68 ID:/FgvtXba.net
もう Perl6 でラクになれよ

279 :デフォルトの名無しさん:2020/03/06(金) 23:38:47.92 ID:nrb1VEEF.net
strawberry perl をインストールしたけど、いろんなモジュールをまたゼロから入れなきゃいけないと思ったらヤル気なくなってとりあえず active perl に戻した。
次は active perl のディレクトリを調べて同じモジュールを strawberry perl にインストールするバッチファイル作んないと。

280 :デフォルトの名無しさん:2020/03/07(土) 06:00:24.07 ID:Q6Yn3ttH.net
>>279
そんな時代はもう終わってるぞ。

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

ソースコードをgitで管理してるとして、新しくプロジェクトに参加するなら、
plenvでperl入れて、git cloneしてモジュール入れるコマンド(cpanm?忘れたw)を叩くだけだ。

281 :デフォルトの名無しさん:2020/03/07(土) 08:04:07.87 ID:GE9TyCQC.net
で、どうやってwindowsから動かすんだ?

282 :デフォルトの名無しさん:2020/03/07(土) 13:07:09 ID:nxiojuUK.net
>>280
クリップボード使えない
アイコンダブルクリックで実行できない
オタクは自分の世界に閉じこもってシコシコやってろよバカ

283 :デフォルトの名無しさん:2020/03/07(土) 18:28:23 ID:jD3HBeI4.net
> クリップボード使えない
使える

> アイコンダブルクリックで実行できない
CLIでアイコンって何言ってるの?

284 :デフォルトの名無しさん:2020/03/08(日) 01:15:11.77 ID:DyTj6VlC.net
perlのスクリプトファイルが関連付けされてたらアイコンダブルクリックで実行できるんだけどね

285 :デフォルトの名無しさん:2020/03/08(日) 01:34:31 ID:rEU5WeDw.net
>>283
>>284
流れ的にWSLの話やぞ?

286 :デフォルトの名無しさん:2020/03/08(日) 01:44:53 ID:DyTj6VlC.net
>>285
勝手に流れ変えるなよw
>>280がwslって言いだしてwslじゃ不便もあるって話だろ?

287 :デフォルトの名無しさん:2020/03/08(日) 05:59:45 ID:P20sq25k.net
>>284
何が不便なのかわからない。

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

関連付けの設定方法がわからないんですは
プログラマやめれのレベルだからな

288 :デフォルトの名無しさん:2020/03/08(日) 06:00:52 ID:P20sq25k.net
>>286
だからWSLでクリップボード使えるし、
関連付け設定を自分でやればWSL上のスクリプトを動かせる

289 :デフォルトの名無しさん:2020/03/08(日) 07:36:51.62 ID:nyv63FmX.net
explorerから.plファイルを起動すると、カレントディレクトリのファイルに対して処理、
みたいなこともできる?

290 :デフォルトの名無しさん:2020/03/08(日) 08:33:18.06 ID:P20sq25k.net
できるだろうな。plファイルだけでできるかもしれんし、
簡単なラッパースクリプトが必要になるかもしれんが大した問題じゃない。
Windows特有の問題にぶち当たることのほうが大変だから

291 :デフォルトの名無しさん:2020/03/08(日) 08:55:09 ID:nyv63FmX.net
readdir は何の文字コードで返ってくるの?

292 :デフォルトの名無しさん:2020/03/08(日) 09:09:34.43 ID:P20sq25k.net
OSは文字コード変換なんてことは行わない。
そんなものが行われるとしたら、それはお前が
使ってる言語とライブラリがやってる。
ようはお前はPerlを知らんのだ

293 :デフォルトの名無しさん:2020/03/08(日) 09:19:17.63 ID:nyv63FmX.net
答えられなくなるとキレるっていうw

cygwinとの互換性で困った問題いろいろは起きそうな感じだな
win8.1のサポートが終わった頃に思い出したら使ってみよう

294 :デフォルトの名無しさん:2020/03/08(日) 09:27:52.75 ID:P20sq25k.net
知らないやつほど他人のせいにする。

295 :デフォルトの名無しさん:2020/03/08(日) 11:23:41 ID:2fZbJlty.net
全部 emacs の中でやれば実質的にクリップボードは使えるし
実行も emacs の中でできる。マウスを使わずにキーボードだけで
すべて完結するが

296 :デフォルトの名無しさん:2020/03/08(日) 22:14:47 ID:z5WqTo29.net
windows使っててマウス使わないなんてありえん

297 :デフォルトの名無しさん:2020/03/08(日) 22:39:04 ID:gXtOMf8r.net
WSLってクリップボード使えるの?
use Clipboardでいける?
今はどうなってるか知らんが知らんがcygwinは無理だったんで/dev/clipboard読み書きするラッパー書いてたな

298 :デフォルトの名無しさん:2020/03/09(月) 14:08:24.97 ID:OgnIoX0o.net
>>296
マウスを使うのは権利であって義務ではないからなあ
ゆっくりとプログラミングをしたいのてあればどうぞご自由に

299 :デフォルトの名無しさん:2020/03/09(月) 14:59:05 ID:eblk0ZGB.net
さすがにキモイw

300 :デフォルトの名無しさん:2020/03/09(月) 19:42:54.58 ID:aF4+X/eL.net
>>288
これマジ?
エクスプローラからWSL上のperlファイルが見えてダブルクリックでWSLのperlで実行できんの?

301 :デフォルトの名無しさん:2020/03/09(月) 21:51:11.95 ID:1P2a1qpP.net
無理でしょ
それぞれに違うファイルシステムになってる
参照はできるようになってるというだけ
windows上の/usr/binって何だよ

302 :デフォルトの名無しさん:2020/03/09(月) 22:34:27 ID:aF4+X/eL.net
だよね
ちょっと信じて損した

303 :デフォルトの名無しさん:2020/03/09(月) 23:01:39.93 ID:d25zd4do.net
アホが見〜る〜ブタのケ〜ツ〜

304 :デフォルトの名無しさん:2020/03/10(火) 01:54:02 ID:Lezaa9m7.net
>>300
> エクスプローラからWSL上のperlファイルが見えて
普通ほぼすべてのファイルが見える
見えないのは/procとか/sysとか特殊なものだけ

> ダブルクリックでWSLのperlで実行できんの?
ファイルが見えてるんだから当然ダブルクリックできる。
もちろん関連付けは必要だがな。
それをWSL内で実行するのもWSLを使わずに実行するのも
関連付けの設定次第

305 :デフォルトの名無しさん:2020/03/10(火) 01:55:43 ID:Lezaa9m7.net
ググれば普通に見つかる

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.61 ID:iN6KW/Ct.net
WSL2は、Windows側のファイル属性とかちゃんとふつうにあつかえるようになったんか?
WSL1のときは完全別物で、全然ダメやったが。

307 :デフォルトの名無しさん:2020/03/10(火) 03:13:18 ID:8QcyJ6p0.net
WSL1もWSL2も同じ。Linuxのファイル属性として正しく扱えるようになった。
Windowsのファイル属性をLinuxアプリが正しく扱えることはありえないから
逆の発想でLinuxとして正しく扱える方向に舵をとった。
Linuxアプリから正しく扱えないなら意味ないでしょ?

308 :デフォルトの名無しさん:2020/03/10(火) 03:17:19 ID:8QcyJ6p0.net
そもそもファイル属性はWindowsの方が高機能で
Linuxは、いろいろ拡張入れたら別だが
基本のファイル属性はUNIX初期の頃から変わって無くてかなり貧弱。
Windowsの高機能なファイル属性をそのLinuxにマッピングすることは出来ない。
逆にLinuxのファイル属性を全てWindows側に持たせることは可能
こうすることで全てのWindowsのファイルをLinuxで正しく扱えるようになった。

309 :デフォルトの名無しさん:2020/03/10(火) 04:18:19.87 ID:/bE8vLVb.net
漏れは、Ruby のバージョンマネージャー、rbenv をWSL, Ubuntu 18.04 に入れた。
これで、Linux 側に、好きなバージョンのRubyを入れられる

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

これが基本!

310 :デフォルトの名無しさん:2020/03/10(火) 04:23:54 ID:qHN38Ccx.net
windowsでも開発できそうだなー

311 :デフォルトの名無しさん:2020/03/10(火) 12:00:40 ID:tTiB+rjP.net
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 ID:nryxofxk.net
>>305
アホか?
バッチファイルでwsl起動してその中で実行してるだけじゃん
レジストリ編集の方もパワーシェルに引数渡してwsl起動してるだけだ
これじゃあcygwin使ってやるのとなんら変わっとらん

313 :デフォルトの名無しさん:2020/03/10(火) 14:03:39.54 ID:0m+9gBGV.net
>>312
あのさ、おまえ頭悪いよ?
目的を一番ラクに実現する方法が
目の前にあるというのにそれを使わないのはアホだろ
ネイティブのPerlを使えばいい
今更PerlのWindows移植版なんかいらんよ。
Windows移植版なんてcygwinと何も変わらん

314 :デフォルトの名無しさん:2020/03/10(火) 15:17:13.04 ID:qHN38Ccx.net
>>311
試してみたけど確かに同じ配列が変えるね
オライリーのDBI本見たらそう書いてあった
selectrow_arrayって方を使ってリストコンテキストで受けるといいみたい

315 :デフォルトの名無しさん:2020/03/10(火) 15:22:16 ID:tTiB+rjP.net
>>314
やはりそうですか…
selectrow_hashrefを使うと$sqlでも$sthでも'A', 'B'それぞれの結果が返るので、selectrow_arrayrefだけ期待と違う動作をしている気がします。(バグ?)

316 :デフォルトの名無しさん:2020/03/10(火) 15:28:19 ID:qHN38Ccx.net
>>315
バグというか仕様だと思う
作者の書いたオライリー本にも書いてあったから意図的なはず
今更変更できないからこのままになってるんだろうね

317 :デフォルトの名無しさん:2020/03/10(火) 15:39:16 ID:tTiB+rjP.net
>>316
なるほど。
それでは今後、selectrow_arrayrefは注意して使うようにしたいと思います。
ありがとうございました。

318 :デフォルトの名無しさん:2020/03/10(火) 15:58:50 ID:SCW8qISh.net
>>313
へー
バッチファイル作ったりトリッキーな関連付けまでしないと動かないのが一番楽な方法ねー
cygwinで全く同じことができるしwin移植版perlならそのまま実行できちゃうんだけどね
ところでエクスプローラからどうやったらwsl内のファイルが見えるんだい?

319 :デフォルトの名無しさん:2020/03/10(火) 16:50:47.58 ID:lAAHr9o2.net
>>311
selectrow_arrayref は最初の1行しか返さないからということはない?

320 :デフォルトの名無しさん:2020/03/10(火) 16:52:18.68 ID:lAAHr9o2.net
ぐえ。リロード忘れたらとっくに話が終わっていて間に沢山の書き込みが

321 :デフォルトの名無しさん:2020/03/10(火) 20:10:42.81 ID:UzsfbeET.net
BOOKOFFに100円で売っていたPerl/CGI辞典によると、
selectrow_array:先頭行
selectcol_arrayref:最初のフィールド
selectall_arrayref:すべて

322 :デフォルトの名無しさん:2020/03/10(火) 23:18:16.01 ID:gGR9Cwad.net
>>318
Windows版Perl使って
Windowsで動かないーってやるより、
安心して使えるバッチファイルを使ったほうがシンプル

323 :デフォルトの名無しさん:2020/03/10(火) 23:32:00 ID:Z32YaYnf.net
いやいやw
WSLならバッチファイルなんか使わなくてもエクスプローラーからダブルクリックでWSL上のスクリプトを直接実行できるんでしょ?
やり方教えてよ
windows版perlならバッチファイルなんか使わなくてももちろん出来るからねw
それとwindows版perlだと何が動かないのかな〜?

324 :デフォルトの名無しさん:2020/03/10(火) 23:37:16 ID:9jB6JpZx.net
バッチファイルとかっていったい何歳の爺さんなんだよ

325 :デフォルトの名無しさん:2020/03/10(火) 23:42:56.03 ID:tP5E2IWo.net
>>323
普通に、wsl.exe+スクリプトファイルのショートカットを作るだけ

326 :デフォルトの名無しさん:2020/03/10(火) 23:51:09.20 ID:Z32YaYnf.net
>>325
やってることはバッチファイルと同じじゃん

327 :デフォルトの名無しさん:2020/03/11(水) 00:05:26.96 ID:5FVYO8f6.net
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.60 ID:3jaBr8Hp.net
ルビーならそうだろうねw

329 :デフォルトの名無しさん:2020/03/11(水) 00:53:43 ID:FWSDJbu9.net
>>326
それで実現できるだろ
しかも完全にちゃんと動くPerlで

330 :デフォルトの名無しさん:2020/03/11(水) 01:05:10.04 ID:zcf0ykb5.net
ハア?
WSLはwindows版perlより楽できるんじゃないの?
なんでわざわざそんな面倒なことすんの?
それとエクスプローラからWSLのファイルが見えてそれをダブルクリックで実行できるって話はどうなったの?

331 :デフォルトの名無しさん:2020/03/11(水) 01:17:13 ID:M00P+dL8.net
WSLはあくまでLinux的システムなアプリであって、Windows側とはやっぱり高い壁がある、と思っとくほうが安全やろ。

332 :327:2020/03/11(水) 01:47:27 ID:EKM5ywjJ.net
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 ID:M00P+dL8.net
Webサーバーを経由すれば、ファイルが地球の裏側にあってもふつうに見れるなー。w

334 :327:2020/03/11(水) 04:58:50 ID:EKM5ywjJ.net
Linux 側のフォルダ内を公開した、Linux側のサーバーに対して、

Windows 側のブラウザのlocalhost で見れるんだよ!!

335 :デフォルトの名無しさん:2020/03/11(水) 09:27:01 ID:AZbrV/6V.net
>>319
>>321
返信ありがとうございます。
すみませんが、selectrow_arrayrefが最初の1行しか返さないということは知っています。
そうではなく、結果(リファレンス)を変数に入れてから再度同じステートメントハンドラでselectrow_arrayrefを使用すると、リファレンス実体の方が書き換わってしまうので、1回目の結果が失われてしまうということを言いたかったのですが…。
サンプルとして'パラメータ付きクエリ'と書きましたが、複数行を返さない単純な「SELECT ?」でも再現します。

336 :デフォルトの名無しさん:2020/03/11(水) 09:44:35.82 ID:LRW51TqV.net
なるほど。

337 :デフォルトの名無しさん:2020/03/11(水) 20:46:52 ID:M00P+dL8.net
>>335
同じ変数を使い回しまくって、パフォーマンスを落とさないためやないの?
GCのないPerlならたいしてかわらんやろけど。

338 :デフォルトの名無しさん:2020/03/11(水) 21:49:34.54 ID:gWo/n1eo.net
>332
ウェブサーバーならbusyboxでよくね?w
数MBのメモリで動作する

339 :デフォルトの名無しさん:2020/03/11(水) 23:17:22.77 ID:k/ve+D91.net
>>335
クエリ結果を保持してるのはステートメントハンドラオブジェクトの方でパフォーマンス優先のためにその内部変数のリファリンスを返すのが*_arrayrefって考えればいいかな
んでselectrow_arrayrefの第1引数に文字列を渡したときは内部で毎回prepareされるので後から実行しても書き変わらないと

340 :デフォルトの名無しさん:2020/03/12(木) 01:40:41 ID:i54BE1kH.net
>>304
よくもこんな大嘘をw

341 :デフォルトの名無しさん:2020/03/12(木) 01:44:08 ID:NTVlQfwP.net
第一引数に$sth渡せるんだって思ったね
文字列しか渡したことないし
Perlはいまだに知らないことがある

342 :デフォルトの名無しさん:2020/03/12(木) 09:49:43 ID:05BordF4.net
>>339
そうですね。
DBI.pmで第1引数がリファレンス(ステートメントハンドラ)ならそのまま使用、そうでなければprepareしているところまではわかったのですが、その後の流れは同じのようでしたし、Driver.xstまで解析するのはやめておきました(^^;)

343 :デフォルトの名無しさん:2020/03/12(木) 16:51:12.87 ID:XWa7Kkjq.net
>>340
そういう時は
How dare you?
と言う。

344 :デフォルトの名無しさん:2020/03/12(木) 16:52:32.93 ID:XWa7Kkjq.net
あ、記号まつがえた。

345 :デフォルトの名無しさん:2020/03/12(木) 17:18:02.38 ID:+5N6GCV3.net
関連付けの仕組みを知らない人がいるのかな?
単にレジストリに、この拡張子はこのコマンドで実行するって書くだけなんだけど

346 :デフォルトの名無しさん:2020/03/12(木) 17:18:57.67 ID:+5N6GCV3.net
つまりcmd。exeから実行できるものは全て
同じやり方で関連付け作れるってことね

347 :デフォルトの名無しさん:2020/03/12(木) 18:12:19 ID:XQbCK6u3.net
それはただの起動のしくみでしかない。
実際の動作は高い壁で分離されてるといって過言でないものをいっしょくたにはできまい。

348 :デフォルトの名無しさん:2020/03/12(木) 18:48:34 ID:U4j5Oz8o.net
>>347
理由は?

349 :デフォルトの名無しさん:2020/03/12(木) 18:49:23 ID:U4j5Oz8o.net
そもそもダブルクリックできるなんて
起動の仕組みなんだから、起動の仕組みでしか無いと言われても
その話をしてるんですよとしか言いようがないがw

350 :デフォルトの名無しさん:2020/03/12(木) 19:40:41 ID:kpO7RyNn.net
だからエクスプローラからWSLにあるファイル見る方法教えてくれってw

351 :デフォルトの名無しさん:2020/03/12(木) 19:47:21 ID:IWxDU6vM.net
それは見れる \\wsl$
エクスプローラからしか見れないのが問題

352 :デフォルトの名無しさん:2020/03/12(木) 19:57:44 ID:MY0SLzQz.net
グレタちゃんもアナルパールを使ってます

353 :デフォルトの名無しさん:2020/03/12(木) 20:49:28 ID:U4j5Oz8o.net
ダブルクリックてエクスプローラーの話じゃん
エクスプローラーから見れるなら、ダブルクリックして開ける。
その証拠にテキストファイルだって開けるだろ

354 :デフォルトの名無しさん:2020/03/12(木) 22:39:56.96 ID:MY0SLzQz.net
グレタちゃんに僕のパイソンを貸してあげたい

355 :デフォルトの名無しさん:2020/03/14(土) 18:16:47.41 ID:jx2yED/o.net
active perlのcryptのsaltにasciiでない文字を渡すと止まるんだけど何で?

356 :デフォルトの名無しさん:2020/03/14(土) 19:34:39.97 ID:RPa5riWU.net
WSLつかえ

357 :デフォルトの名無しさん:2020/03/14(土) 22:58:59.61 ID:eh0BX5+5.net
>>355
理由を聞いてどうするんや?
文字コードとかややこしいから、対応してないんやろ。

358 :デフォルトの名無しさん:2020/03/14(土) 23:16:24 ID:5TZ0Uf7y.net
分からんのなら黙ってろやチンカス

359 :デフォルトの名無しさん:2020/03/14(土) 23:39:11.11 ID:9VuyfYoc.net
暗号化って、base64 とかだろ。
ascii だけだろ

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

module SecureRandom
https://docs.ruby-lang.org/ja/latest/class/SecureRandom.html

360 :デフォルトの名無しさん:2020/03/14(土) 23:44:18.11 ID:jx2yED/o.net
keyの方は何でもokなんだけどな

361 :デフォルトの名無しさん:2020/03/15(日) 03:21:52.90 ID:ey4TMar/.net
>>358
わかってもなにもできんくせに
ゴミクズ

362 :デフォルトの名無しさん:2020/03/15(日) 18:38:42.70 ID:8dswEreI.net
グレタちゃんのクリトリスは100カラットのルビー

363 :デフォルトの名無しさん:2020/03/16(月) 09:00:22.83 ID:m2o8L3Qu.net
>>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.24 ID:jMV62GuM.net
128-255を渡しても止まるんだけどね
エラーが出るとかじゃなくて異常終了する
仕様だとは思い難い

365 :デフォルトの名無しさん:2020/03/16(月) 20:07:47.98 ID:O3TrJAsg.net
「異常終了」じゃなくて、「die」してるんちゃううんか?
>>363にもそう書いてあるやろ。

トラップしたけりゃevalしろ。

366 :デフォルトの名無しさん:2020/03/16(月) 20:22:32 ID:jMV62GuM.net
die すると何かエラーメッセージ出しておとなしく終了するんじゃないのか?
windowsに怒られとるぞ

367 :デフォルトの名無しさん:2020/03/17(火) 00:31:17 ID:WzQFj8c+.net
この言語はなにが起こるかわからんので基本evalで囲わないとやってられませんね

368 :デフォルトの名無しさん:2020/03/17(火) 00:59:40.01 ID:DZYZalLc.net
トラップでevalってなんだっけ?w
Perlやめてから結構立つから忘れた。
なんかそんなのあったなwww

今?Perlからシェルスクリプトに回帰していますがなにか?

369 :デフォルトの名無しさん:2020/03/17(火) 05:25:03.15 ID:WzQFj8c+.net
>>368
これ
https://perldoc.jp/func/eval
eval BLOCKってやつ

try catchみたいなもん

370 :デフォルトの名無しさん:2020/03/17(火) 08:02:58 ID:sAGmKBfN.net
エラーが返るならtryできるだろうけど、試してみたら異常終了するようなもんも避けられるのか?

371 :デフォルトの名無しさん:2020/03/17(火) 21:45:41.98 ID:sAGmKBfN.net
https://i.imgur.com/T58MWmG.png
evalでもトラップできない

372 :デフォルトの名無しさん:2020/03/18(水) 00:13:57 ID:+5qWGdwM.net
man にはどう書いてあるの? Perl の crypt じゃなくて C のライブラリの方だよ。

373 :デフォルトの名無しさん:2020/03/18(水) 01:56:55 ID:jzX09kaS.net
WindowsだしActivePerlのようだし、何がおきてもふしぎじゃないな。w

374 :デフォルトの名無しさん:2020/03/18(水) 09:12:43 ID:SzV6uL92.net
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 ID:iQ6PHWNN.net
Windows7とか?

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

大量一括検索の高速化のテクニックみたいなの何かあるのかな

377 :デフォルトの名無しさん:2020/03/28(土) 18:48:22.67 ID:Cuxaq7bT.net
>>376
https://metacpan.org/search?q=grep
使った事ないが MCE::Grep 辺りは説明読む限り速そう

378 :デフォルトの名無しさん:2020/03/28(土) 18:55:38.49 ID:Cuxaq7bT.net
もっと基本的な話なら perlperf
https://perldoc.jp/docs/perl/perlperf.pod

379 :デフォルトの名無しさん:2020/03/28(土) 19:23:29.33 ID:gZJzrXqn.net
MCE::GrepはCPUの使用率は上がるけど遅くなった
grepよりは正規表現の処理のあたりが時間かかってるんだと思う

感覚的にはもっと高速でも全然おかしくない感じなのに

380 :デフォルトの名無しさん:2020/03/28(土) 19:34:33 ID:gZJzrXqn.net
100MBのファイルからパターンに合う行を全部抽出するのに1秒かかるくらいの感じ
で、パターンが250もあるから、コーヒーが飲めるくらい待たされる

381 :デフォルトの名無しさん:2020/03/28(土) 20:00:38.86 ID:L8+cmwNy.net
俺だったらgrepでやっちゃうなぁ
結果はファイル経由で

382 :デフォルトの名無しさん:2020/03/28(土) 21:36:49.99 ID:L89shHGR.net
>>376
qr//で事前に正規表現をコンパイルしてみたら?

383 :デフォルトの名無しさん:2020/03/28(土) 21:55:00.53 ID:gZJzrXqn.net
同じパターンで繰り返し検索するのではなくて、
いろんなパターンで同じ対象を検索するので、コンパイルはできない

でも、パターンのリストは実行前に確定しているので、
qrで作ったものを配列に持たせておけば速くなるだろうか

384 :デフォルトの名無しさん:2020/03/28(土) 23:16:33.34 ID:2U8ZKDy+.net
もはや perl の能力を超えているな
C とかで書いた方がいい

385 :デフォルトの名無しさん:2020/03/28(土) 23:24:04.96 ID:ZQFwrOhU.net
パターンの内容にもよるが、flex で書いて Inline::C で呼ぶという方法もある。

386 :デフォルトの名無しさん:2020/03/28(土) 23:25:40.33 ID:7nefda3x.net
色んなパターンで?
grep -f でパターン読ませてやるのと同じか?

387 :デフォルトの名無しさん:2020/03/29(日) 09:15:52.43 ID:9AyQFVoq.net
素の Perl は NFA だけだから、どうしても速度的には不利になる。
パターンが250もあるなら尚更だ。
grep との差はPerl と C の差はもちろんあるだろうが
DFA でできるパターンなら、その差が大きいと思う。

388 :デフォルトの名無しさん:2020/03/29(日) 09:42:19.51 ID:aacnUCYv.net
linuxだったら素直にgrep呼べばいいだけだけど、
windowsだと素性が良くて高速なgrepを探すところでまず困難がある
さらに、grepに引数を渡すところにもエスケープ文字の困難があって、
結果の受け取りにも文字コードの困難が

389 :デフォルトの名無しさん:2020/03/29(日) 17:43:38 ID:9AyQFVoq.net
そういえば awk は DFA じゃなかったかな。

390 :デフォルトの名無しさん:2020/03/30(月) 00:14:28 ID:mvvN5DTM.net
perl の Memoize は関数全体に掛けるようですが、
ruby の @memo、javascript の memo の変数に掛けるのは新し目の使い方でしょうか

391 :デフォルトの名無しさん:2020/03/30(月) 04:32:31 ID:PdZ6Klrm.net
>>388
WSLのUbuntuだとどうなのだろうか?
あれ遅い?

392 :デフォルトの名無しさん:2020/03/30(月) 08:35:14.72 ID:3FWyQXw7.net
NFA でなければならない理由がないなら DFA にするだけで速度 1000 倍は堅いかも。
でも Perl のままでも正規表現のチューニングは可能だ。まだやってないならね。
実際に使ってるパターンを見せてもらわないことにはなんとも言えないが。

393 :デフォルトの名無しさん:2020/03/31(火) 12:53:45.32 ID:GaEXrIp5.net
>>388
普通にWSLを使えばいいだけでは?

394 :デフォルトの名無しさん:2020/03/31(火) 22:24:02.97 ID:Z+pFaYZ2.net
win8.1のサポートが終わった頃に思い出したら使ってみよう

395 :デフォルトの名無しさん:2020/04/22(水) 13:25:13 ID:gkB+0fgm.net
@array = ($str =~ /(PAT1).+?(PAT2).+?(PAT3)/g);
みたいにすると、パターン3つ分が配列に入るけど、他にもマッチするとそれも続けて入る
できれば2次元配列になって欲しい
そんな技はある?

396 :デフォルトの名無しさん:2020/04/22(水) 18:47:25.28 ID:WLkEu+yG.net
そういうことをする時のセオリーはスカラコンテキストで
$str =~ /\G$pat/g

397 :デフォルトの名無しさん:2020/04/22(水) 19:29:55 ID:gkB+0fgm.net
可能?

$str = '1a2b3c1x1d2e3f1g2h3i';
を与えられて
[[a, b, c], [d, e, f], [g, h, i]]
を得るにはどうすれば

398 :デフォルトの名無しさん:2020/04/22(水) 20:38:21.44 ID:f6F85tCk.net
my @arr = ();
while ($str =~ /\G.+?([a-z]).+?([a-z]).+?([a-z])/g) {
  push @arr, [$1, $2, $3];
}

399 :デフォルトの名無しさん:2020/04/22(水) 20:54:42 ID:gkB+0fgm.net
[[a, b, c], [x, d, e], [f, g, h]]
になっとるよ

400 :デフォルトの名無しさん:2020/04/22(水) 20:56:31 ID:gkB+0fgm.net
でも判った
普通に$1使えばいいだけか
結果を一つずつスカラに取るんだと思ってた

401 :デフォルトの名無しさん:2020/04/22(水) 21:01:22 ID:gkB+0fgm.net
/\G.*?1(.)2(.)3(.)/g
これがやりたかったこと

402 :デフォルトの名無しさん:2020/04/22(水) 21:27:03 ID:gkB+0fgm.net
結局コードはあんまり変わらなくて、ループで
push @array, ($1, $2, $3)
にするか、後で
splice(@elements, 0, 3)
を使っていくかの違い

パターンを3つから4つに増やした時に、
$4を追加するか、3を4に増やすかのメンテはやっぱり必要
いきなり2次元配列が得られるスマートさからは劣る

403 :デフォルトの名無しさん:2020/04/22(水) 21:30:34.59 ID:WLkEu+yG.net
どうやら今回は必要ないみたいだけど事前にグループの個数が
判らないという前提なら @- とか見ればいい。
あるいはグループに名前を付けて %+ を使えばいい。
全部ここに書いてあるよ。
https://perldoc.jp/pod/perlretut

404 :デフォルトの名無しさん:2020/04/22(水) 21:32:10 ID:f6F85tCk.net
Perlで、とある配列を指定した要素数ごとに別の配列リファレンスに分割する処理をList::MoreUtilsモジュールで書き直してみた
https://perl48.hatenablog.com/entry/2018/08/19/005304

405 :デフォルトの名無しさん:2020/04/22(水) 23:57:47 ID:WLkEu+yG.net
名前を付けるような性格のものじゃなくて個数が変わる可能性があるなら
個数だけ与えてパターンを組み立てればいいよ。
$1,$2 とか書かなくても
map { ${$_}} 1 .. $n
で同じことができるし。
リストコンテキストで配列に入れてから splice する方がいいと思うならそうすればいい。

406 :デフォルトの名無しさん:2020/04/23(木) 08:13:25 ID:7CKy0JPC.net
目指すのは、個数がいくつなのか人間が把握しなくていいコード

407 :デフォルトの名無しさん:2020/04/23(木) 08:30:38.98 ID:IlZrBGCM.net
できるでしょ。自分がスマートになってスマートなコードを書けばいい。

408 :デフォルトの名無しさん:2020/04/23(木) 12:10:21.89 ID:2vqGx7d4.net
完全に数値って決まってるんなら、俺ならsplit使っちゃうな
@a = split /\d/, $str;
まあこんな単純な話じゃないんだろうけど

409 :デフォルトの名無しさん:2020/05/01(金) 10:49:51 ID:baJ3Dlo6.net
activeperlで
$res = `exefile $file`;
みたいなことをした時に、
コマンドプロンプトからスクリプトを起動するとちゃんと動く
でも、スクリプトをランチャーから起動するとno such fileになる
ファイル名が英数ならどちらもok
2byte文字が混じると挙動が変わる

起動の仕方によってパスの取り扱いとか変わる?

410 :デフォルトの名無しさん:2020/05/01(金) 12:19:28 ID:baJ3Dlo6.net
あ、違う
2byte文字ではなくドライブの違いだった
ネットワークドライブにあるとアクセスできない
コマンドプロンプトからならできる

411 :デフォルトの名無しさん:2020/05/01(金) 13:08:35 ID:baJ3Dlo6.net
結局、ランチャーに管理者権限が付いてるのが原因

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
EnableLUA 1 -> 0
これで解決する
perl関係ない

412 :デフォルトの名無しさん:2020/05/01(金) 13:13:09 ID:9YL7RFP8.net
ランチャー自身か、ランチャーの起動方法がよくないんやろ。
ネットワークドライブの認証(ログオン)かそのタイミングがあやしい。

413 :デフォルトの名無しさん:2020/05/01(金) 13:13:40 ID:9YL7RFP8.net
あら、自己解決?

414 :デフォルトの名無しさん:2020/05/10(日) 19:19:00.31 ID:gcVsfbhd.net
質問させてください。
WindowsでActivePerlを使っています。
perl で、あるファイルを、関連付けられたアプリケーションで開く
には、どのようにすればよろしいでしょうか?

例えば、xx_system('foo.txt') のようにすると、'.txt'に
関連つけられたアプリケーションで、'foo.txt'を開くような
動作を実現したいのですが。

415 :デフォルトの名無しさん:2020/05/10(日) 21:12:47 ID:04IHVppx.net
system(1, 'foo.txt');

416 :デフォルトの名無しさん:2020/05/10(日) 22:26:25.38 ID:gcVsfbhd.net
>>415
動きました。ありがとうございました。

417 :デフォルトの名無しさん:2020/05/28(木) 11:01:17 ID:5kmQgXWn.net
最近 python を使い始めたんだけど、使うほどに perl 凄げーって思う。
perlって細かいこと気にしないでも書けるって感じ。
まあ、 python に慣れてないってのもあるけどw

418 :デフォルトの名無しさん:2020/05/28(木) 12:00:57.19 ID:yN32+nQR.net
細かいことを気にしないせいでバグの原因になるので、
きちっとしか書けないようにした

perlの不満を解消してもっと簡単に書けるようにしたのは、
rubyの方が正常進化だと思う

419 :デフォルトの名無しさん:2020/05/28(木) 12:46:18.60 ID:d4ggzNnr.net
>>418
use strict;
use warnings;

420 :デフォルトの名無しさん:2020/05/28(木) 12:49:38 ID:MEC8WK3T.net
Perl は、暗号のような記号が多いから、皆嫌う

Ruby は可読性を上げるために、それらの記号を無くそうとしている

421 :デフォルトの名無しさん:2020/05/28(木) 13:57:57 ID:EGYBOXys.net
>>420
変数の型を知るのに
宣言まで見ないとわからないのがJava
代入まで探さないとわからないのがpython
見るとその場でわかるのがperl
宗教論争は終わらない

422 :デフォルトの名無しさん:2020/05/28(木) 14:14:16 ID:yN32+nQR.net
マウスオーバーで判るようなものをいちいち書かなくても

423 :デフォルトの名無しさん:2020/05/28(木) 19:40:22.87 ID:2jhnUESo.net
PerlでIDEは使わないわな

424 :デフォルトの名無しさん:2020/05/28(木) 20:04:53.96 ID:EYUPTTzW.net
んなこたーない

425 :デフォルトの名無しさん:2020/05/28(木) 20:14:52 ID:2jhnUESo.net
いやいやPerl書いてるときマウス触らんでしょ
まあ人によるんだろうが

426 :デフォルトの名無しさん:2020/05/28(木) 20:21:04.17 ID:yN32+nQR.net
ロジックが逆だ
perlが型が判るからマウスを触らないのではなく、
マウスを触らないで作ったからマウスなしで型が判るようになってる

MT免許だからといってATに乗ってはいけない訳ではない

427 :デフォルトの名無しさん:2020/05/29(金) 20:28:53.39 ID:Ey9K/+fw.net
Perl の IDE って、どんなのがある?

Eclipse とか IntelliJ IDEA のプラグインで使えたとは思ったが、拡張子を .pl にしておかないと Perl だと判別してくれなくて
ただのテキストファイルと認識されちゃって使い辛いなと思ったことはあるが、もっとまともなのある?

428 :デフォルトの名無しさん:2020/05/29(金) 20:32:29.66 ID:uRkXoYhe.net
vscode + Perl::LanguageServer

429 :デフォルトの名無しさん:2020/05/29(金) 20:34:34.78 ID:Bk25Bwk1.net
サクラエディタで十分なんですよ(´・ω・`)

430 :デフォルトの名無しさん:2020/05/29(金) 21:27:39 ID:dZOo8Hm0.net
拡張子を ,pl にしないメリットってなんかある?

431 :デフォルトの名無しさん:2020/05/29(金) 21:28:20 ID:Bk25Bwk1.net
実行ファイルはpl
モジュールはpm
そんな事も知らんのか(´・ω・`)

432 :デフォルトの名無しさん:2020/05/29(金) 21:36:34.81 ID:8nIWWcW2.net
perlはvimで書く。
お兄さんとの約束だよ。

433 :デフォルトの名無しさん:2020/05/29(金) 21:38:26 ID:uRkXoYhe.net
mattnさんはパンツ履いて

434 :デフォルトの名無しさん:2020/05/29(金) 23:37:14.00 ID:GfVaVkMA.net
>>430
Linuxでは、いちいち拡張子をつけないのがふつう。
中身を気にしなくてよくなる。

435 :デフォルトの名無しさん:2020/05/30(土) 00:29:42 ID:UYDx2q8r.net
>>434
cとかshellとか拡張子をつけるのが普通なんじゃないの?

436 :デフォルトの名無しさん:2020/05/30(土) 00:31:15 ID:pcDYqVj5.net
ソースは付ける
実行ファイルは付けない
スクリプトはソースよりも実行ファイル寄り

437 :デフォルトの名無しさん:2020/05/30(土) 00:42:58 ID:h6ZQaP0H.net
拡張子つければ伝わるであろう情報を削るとか
一人で管理してるサーバならいいけど
そうじゃなきゃ害悪だと思う

438 :デフォルトの名無しさん:2020/05/30(土) 01:44:27.37 ID:UYDx2q8r.net
人間がエディトするファイルは付ける
人間がエディトしないファイルは付けないんじゃないの?

439 :デフォルトの名無しさん:2020/05/30(土) 01:51:00.93 ID:h49XlInt.net
運用においては、実行ファイルの実装方法なんかどうでもいい。
むしろ、実装方法を変えたら、ファイル名も変わるほうがはるかに害悪。

たとえば、シェルスクリプトをPerl スクリプトに変えただけで、そのスクリプトを使っているところをすべて変更しないといけなくなる。

440 :デフォルトの名無しさん:2020/05/30(土) 03:26:43.00 ID:k7WMMDxu.net
昔々 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.07 ID:Noe/rV9t.net
拡張子が無くても判定できるようにすればいいんじゃないの? Emacs みたいに。

442 :デフォルトの名無しさん:2020/05/30(土) 12:16:10.21 ID:h49XlInt.net
>>441
つ fileコマンド

443 :デフォルトの名無しさん:2020/05/30(土) 13:18:31.04 ID:9sn/rA++.net
>>439
運用のために保守は犠牲にするんですか?

444 :デフォルトの名無しさん:2020/05/30(土) 13:58:45.71 ID:h49XlInt.net
>>443
実装の変更は、保守の範囲ではない。
二次開発かな?w

445 :デフォルトの名無しさん:2020/05/30(土) 15:56:11.11 ID:CwCZ2prN.net
>>440
シェバン知らず?

446 :デフォルトの名無しさん:2020/05/30(土) 18:54:59 ID:h49XlInt.net
>>445
>>440はその前の話やろ。
シェバンがあるだけで、テキストファイルが勝手に起動されたら恐ろしいわ。w

447 :デフォルトの名無しさん:2020/05/30(土) 19:43:41.34 ID:GvMJ9/EG.net
>>432
おじいちゃん(´・ω・`)

448 :デフォルトの名無しさん:2020/05/31(日) 02:15:32.98 ID:MeZ7svrP.net
言語変えて作り直すって、俺の感覚ではシステム置き換えのイメージだわ
コンパイル済みのバイナリならともかく、スクリプト言語動かすって環境づくりも入るじゃん

449 :デフォルトの名無しさん:2020/05/31(日) 02:44:16.68 ID:pTVQa+4z.net
>>445
>>440に書いてあること読んでないだろ。

450 :デフォルトの名無しさん:2020/05/31(日) 03:40:37.55 ID:qe5b9Icc.net
その前って何?
だからシェバン使えば拡張子なんか使う必要はないってことだよ?
>>439みたいな書き換えはいらないってことを言ってる
あと自演して書き込みは見苦しいぞ

451 :デフォルトの名無しさん:2020/05/31(日) 04:22:23 ID:fhA8y4ka.net
読解力理解力がなくて、複数から指摘されたからって、自演扱いで返すとは見苦しいぞ。

452 :デフォルトの名無しさん:2020/05/31(日) 05:26:43.75 ID:pTVQa+4z.net
>>450
それ何のOSでの話?

453 :デフォルトの名無しさん:2020/06/11(木) 19:05:11.82 ID:5cioSHJn.net
「local $| = 1;」と言う記述見たんですけど、
「$|」の局所化って意味あるのでしょうか?
ただ単に「$| = 1;」と等価であり「local」を記述しても無駄な気がするんですけど、
私の勘違いでしょうか?

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

分かるかた教えてください。

454 :デフォルトの名無しさん:2020/06/11(木) 19:32:41.35 ID:zOJFiWlV.net
>>453
スコープを抜けたときに、もとの値に戻る。

455 :デフォルトの名無しさん:2020/06/11(木) 19:37:09.97 ID:YKNmcAQr.net
横からだけど知らなかった…
毎回もとの値別変数で退避してた

456 :デフォルトの名無しさん:2020/06/11(木) 19:53:05.96 ID:L2GhQgnz.net
なんとなく直感的にグローバル変数だけだと思ってた
だから元の値を退避しておくという発想の方が自然
わざわざぶつけて便利に使おうという発想はいずれバグる

457 :デフォルトの名無しさん:2020/06/11(木) 20:13:03.35 ID:5cioSHJn.net
>>454
レスありがとうございます。

「もとの値に戻る」と言う事は、a.plから参照される異なるスコープのb.pmがあり、
b.pmに「local $| = 1;」の記述があった場合、
b.pmに定義されたサブルーチンが呼び出される毎に、
「$| = 1;」と同等の処理が行われ、
戻る際には元の値がセットされるのでしょうか?
それとも、スコープによって異なる「$|」を、
標準出力側でスコープ毎に切り替えてるという事でしょうか?

458 :デフォルトの名無しさん:2020/06/11(木) 20:24:12.92 ID:L2GhQgnz.net
printする度に今見えてる$|が渡ってるんだろうな

459 :デフォルトの名無しさん:2020/06/11(木) 21:09:21.20 ID:5cioSHJn.net
>>458
まぁ、そうですよね。無駄な処理になるし後者ですよね。
(OOP的に言うと、スコープ毎のインスタンスを参照的な)
ありがとうございました。

460 :デフォルトの名無しさん:2020/06/11(木) 22:40:57.89 ID:zOJFiWlV.net
>>456
Perlにあっては「わざわざ」ではない。
localはダイナミックスコープ、my/ourはレキシカルスコープであることは意識しておくべき。

461 :デフォルトの名無しさん:2020/06/12(金) 02:39:58.45 ID:TN61WwYv.net
宜しくお願いします。
$1をクリアしたい場合は「'' =~ /()/;」等として
無駄なマッチングをして空文字列を設定しないとダメですか?
数億件のデータを捌く際とか、めちゃくちゃタイムロスになりますよね?
皆様はどうされてるのでしょう?

462 :461:2020/06/12(金) 02:41:54.90 ID:TN61WwYv.net
>>461
↑に追記です。
$2以降のクリアも含めてお願いします。
最適な解を頂ければ幸いです。

463 :540:2020/06/12(金) 02:51:00.48 ID:OceO7BHX.net
>>461
まず、scalar変数の場合
=()はできない

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

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

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

undefは値として評価されれれば0,文字列として評価割れれば空文字列''が返った
(と思う)

464 :デフォルトの名無しさん:2020/06/12(金) 03:17:40.95 ID:O2sQpJVa.net
答えではないのだけれど、そういう場面に遭遇したことがないんだよね
簡単でいいのでどんな時に必要なのかしら?

465 :461:2020/06/12(金) 03:24:01.31 ID:TN61WwYv.net
>>463
あの…すみません。
スカラー値の評価の話をしている訳ではありません。
$1や$2や$3と言った特殊変数の値をクリアをする方法を聞いています。
これらの特殊変数に値を代入したらエラーになります。

引き続き>>461-462のベストな解をお待ちしています。
宜しくお願いします。

466 :461:2020/06/12(金) 03:52:20.68 ID:TN61WwYv.net
>>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 ID:Cyxf//AW.net
>>465
そもそも、$nはマッチしたときのみ参照する変数であるから、わざわざリセットする必要がない。

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

これ以上の回答は>>464に答えてから。

468 :デフォルトの名無しさん:2020/06/12(金) 04:13:00 ID:Cyxf//AW.net
あら、いきちがった。。。

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

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

「かも」とか言ってないで、真剣ならまず計測してみろ。

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

470 :デフォルトの名無しさん:2020/06/12(金) 05:31:29 ID:P559B0Rd.net
$1をやめる選択肢は?

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

471 :デフォルトの名無しさん:2020/06/12(金) 05:32:22 ID:P559B0Rd.net
あ、/ 多い……

472 :デフォルトの名無しさん:2020/06/12(金) 05:38:56.76 ID:O2sQpJVa.net
答えじゃないんだけどさ、
$x = $ln =~ /^(パターン):/ && $1
これで以降は$xを使う、とか。

473 :デフォルトの名無しさん:2020/06/12(金) 05:48:44 ID:P559B0Rd.net
え、array使わないの?
俺としては

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

を推したい

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

特殊変数をクリアする必要など、考えたこともない

475 :デフォルトの名無しさん:2020/06/12(金) 09:26:27.43 ID:Xic6e0Vs.net
マッチに失敗してるのに古い$1を使ってしまって、
みたいなケースはちょいちょいあるな

それはクリアしてなかったからではなくて、失敗をトラップしてないバグ

476 :デフォルトの名無しさん:2020/06/12(金) 13:25:45.07 ID:Qkj+08r5.net
>>466
もうCで書いちゃえよ。速いよ。
コロンまでの文字列抜き出すのは簡単だろう。

477 :デフォルトの名無しさん:2020/06/12(金) 13:29:01.14 ID:Qkj+08r5.net
速くしたいなら正規表現でマッチするかどうかなんてことやることそのものが間違いだとも思える。
同じPerl使うのであってもindex関数使うとか、他にやりようがあるんじゃないか?

478 :デフォルトの名無しさん:2020/06/12(金) 14:03:27 ID:Xic6e0Vs.net
大量のデータを効率よく扱うのは、データベース構築するのが正解

個人が扱う範囲だと、テキストで持って全検索で困らないけど、
量が増えるとそのうち破綻する

479 :デフォルトの名無しさん:2020/06/12(金) 14:24:52 ID:uUh54YqY.net
>466

$ln =~ /^(パターン):|(.*?)/
にすると、「^(パターン):」にマッチしないときに$1を空文字にできる。

480 :デフォルトの名無しさん:2020/06/12(金) 14:50:38.25 ID:uUh54YqY.net
ただ、(試してはいないが)if文のオーバーヘッドより、
関数呼び出しのオーバーヘッドのほうが大きいと思うけどな。

481 :デフォルトの名無しさん:2020/06/12(金) 15:40:26.50 ID:bpI5hVyH.net
そこまで速度に気にするならC++とかで書いた方がいい気がするね

482 :デフォルトの名無しさん:2020/06/17(水) 18:41:04 ID:TVwLVBUa.net
そんなデカいデータをよくパールでやるね。
C で書け。

483 :デフォルトの名無しさん:2020/06/28(日) 09:30:04.48 ID:mI+4+ud7.net
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.20 ID:OE2OIMMC.net
5の後継なら7にする必要あるの?

485 :デフォルトの名無しさん:2020/06/28(日) 13:29:12.55 ID:3gXsrtkR.net
>>484
事情を知らなくても最新版だとわかりやすくするために。

Perl6、Rakuがあるなかで、Perl5と言われたら古いとかEOLとかの疑いを持たれかねんから。
それに、必要であれば非互換も?

486 :デフォルトの名無しさん:2020/06/28(日) 18:17:09 ID:UG2zXSFM.net
お型付けできるようになったら嬉しいな

487 :デフォルトの名無しさん:2020/06/28(日) 19:55:20.21 ID:DGGKS5Fb.net
ついに後方互換捨てるのか!

488 :デフォルトの名無しさん:2020/07/02(木) 21:44:39.67 ID:wuNvV9ki.net
デフォルトの状態が変わるだけで
適宜オプションつければ後方互換も保てるらしいよ
Perlのこういうところ好きだわ

489 :デフォルトの名無しさん:2020/07/04(土) 13:31:08.07 ID:yrmljXci.net
今のところは、な・・・

490 :デフォルトの名無しさん:2020/07/04(土) 18:51:36.50 ID:25OQuAeP.net
Perl7は進化を求める
この10年で完全にオワコン言語になってしまった

491 :デフォルトの名無しさん:2020/07/04(土) 19:41:56.61 ID:+vSKr8nf.net
効率化して高速化しようとしても、過去に足を引っ張られる

492 :デフォルトの名無しさん:2020/07/04(土) 19:48:46.40 ID:VctW6lO7.net
単純に過去を切り捨てたら、Rakuの二の舞になる。過去を切り捨てるのであれば、
Python に勝てる程度の言語仕様にしなければ、見向きもされないだろう。
しかし、それはもう既にPerlではないだろう。

493 :デフォルトの名無しさん:2020/07/04(土) 20:01:08.35 ID:XHKaM396.net
Perlはこのままでいいと思う
レガシーなのがPerlの強さ

494 :デフォルトの名無しさん:2020/07/04(土) 20:55:27.14 ID:+vSKr8nf.net
negative legacy

495 :デフォルトの名無しさん:2020/07/05(日) 01:06:23.02 ID:BkxIDrcL.net
>>492
はい。
Wiki>「Perlに続く」という意味で、6月の次の誕生石(7月)のルビーから名付けられた

496 :デフォルトの名無しさん:2020/07/06(月) 00:05:12.58 ID:Dee8Pqdl.net
逆に頑張って作ったPerl6が古いみたいな感じになっちゃうな(´・ω・`)

497 :デフォルトの名無しさん:2020/07/06(月) 02:55:32.01 ID:pEZsiPGN.net
もうPerl6は存在しないからだいじょうぶ。

498 :デフォルトの名無しさん:2020/07/06(月) 03:53:08.41 ID:Lg+fAiJM.net
Perl6はさっさと開発中止すべきだったのになぜ続行したんだろう

499 :デフォルトの名無しさん:2020/07/06(月) 19:42:39.82 ID:5vDJxItj.net
ま、いいじゃねえか。新しい言語が一つ増えたようなもんだし。

500 :デフォルトの名無しさん:2020/07/06(月) 21:20:03.77 ID:pEZsiPGN.net
>>498
「すべき」って、おまえは何様なんや?

やりたい人がやってただけ。
結果としてうまくいかなかっただけ。

501 :デフォルトの名無しさん:2020/07/07(火) 18:34:24.36 ID:e1WbjzO/.net
うまくいくべき

502 :デフォルトの名無しさん:2020/07/07(火) 18:40:58.31 ID:/oL+BKEU.net
べきであるある

503 :デフォルトの名無しさん:2020/07/07(火) 18:42:17.26 ID:v8PkKQM3.net
>>500
何様ってw
匿名掲示板で何を言ってるのw
強いていうならPerlユーザーですw

504 :デフォルトの名無しさん:2020/07/07(火) 19:01:21.20 ID:e1WbjzO/.net
俺様

505 :デフォルトの名無しさん:2020/07/23(木) 01:04:36 ID:2kWEZYuR.net
___________________________________________

/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.79 ID:6LXR6fOg.net
binmodeで開いて、substr

507 :デフォルトの名無しさん:2020/07/23(木) 19:03:52.69 ID:2kWEZYuR.net
>>506
ありがとう
素人過ぎてわかんないけど

508 :デフォルトの名無しさん:2020/07/23(木) 19:09:07.35 ID:NaEhWCW1.net
コードそのものを書いてくれとさ

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

_________________________________________________________

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.03 ID:6ZonvnML.net
そうそう。そんな感じ。
まあ頑張って。

511 :デフォルトの名無しさん:2020/07/24(金) 09:07:49.48 ID:So4dssPK.net
書き換える番地は、N は、0 以上で、以下の法則か?
0x8000 × N + ( 0x80 + 0x1C )

つまり、ヘッダは必ず、0x8000 毎にあるのか?

512 :デフォルトの名無しさん:2020/07/24(金) 11:24:40.72 ID:JRbdBOQM.net
>>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.23 ID:nuOKXnku.net
オレなら、バイナリーエディタの置換機能を使うと思うが。

514 :デフォルトの名無しさん:2020/07/24(金) 11:40:12.29 ID:61Z/1/Bp.net
数が多いとツール作った方が早い
手動でやってもツール作っても時間同じなら、ツール作った方がいい
仕事では、ツール作ったせいで余計に時間かかってもツール作る

515 :デフォルトの名無しさん:2020/07/24(金) 11:53:07.60 ID:JRbdBOQM.net
>>513
データが大きいのでLinuxのバイナリエディタでは上手く行かないのです

516 :デフォルトの名無しさん:2020/07/24(金) 12:54:55.96 ID:JRbdBOQM.net
https://i.imgur.com/Y6NhiUE.jpg

この文字列が一定間隔で現れます
データが大きいので>>514さんの言うとおりツール(スクリプト)で処理したいのです

517 :デフォルトの名無しさん:2020/07/24(金) 15:39:03.44 ID:EkE5sKTE.net
perl -e "binmode STDIN; binmode STDOUT; while (read STDIN, $_, 0x8000) { substr $_, 0x1c, 1, 0; print }" < IN > OUT
これが最短?

518 :デフォルトの名無しさん:2020/07/24(金) 15:58:32.23 ID:JRbdBOQM.net
>>517
レスありがとうございます
泣きそうです(解らなすぎて)

>>509のスクリプトはバイナリ修正したコピーファイルを作成するものでした
小さなファイルなので問題ないのですが、目的の対象ファイルは10GB~20GBもあるものなのでマネ出来ません

519 :デフォルトの名無しさん:2020/07/24(金) 16:06:11.64 ID:JRbdBOQM.net
>>509の全文です

https://i.imgur.com/qOj8IAs.jpg

後出しのクセが強すぎすいません

520 :デフォルトの名無しさん:2020/07/24(金) 16:07:20.05 ID:UzZpGBU/.net
>>515
なるほどね。しかし、perlが扱えるデータ量にも、よく解らない限界があって、
巨大なデータを突っ込むと勝手に途中で切られたりするみたいだよ。
巨大なデータを扱うなら、seek関数みたいな低水準な手法を使う必要があるかもしれない。

521 :デフォルトの名無しさん:2020/07/24(金) 16:48:28.89 ID:EkE5sKTE.net
直接書き換えたいならこんなとか?
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.72 ID:61Z/1/Bp.net
別に短く書くコンテストではない

523 :デフォルトの名無しさん:2020/07/24(金) 17:06:42.97 ID:JRbdBOQM.net
>>521
ありがとうございます
Fはファイル名でよろしいでしょうか?(素人でごめんなさい)

Can't find string terminator "'" anywhere before EOF at -e line 1.
となります

524 :デフォルトの名無しさん:2020/07/24(金) 17:29:22.03 ID:JRbdBOQM.net
サンプルです
https://www.dropbox.com/s/zjhagi19dx0akbv/HR_STR01.SRO?dl=0

もしよろしければ暇つぶしに、ご指南いただけませんか?
(もう、いただいてますけど)

525 :デフォルトの名無しさん:2020/07/24(金) 17:49:05.64 ID:JRbdBOQM.net
よく考えたらダメだったw

526 :デフォルトの名無しさん:2020/07/24(金) 19:45:46.20 ID:lCl1FARv.net
GBレベルのファイルがオンメモリで処理できるわけないだろ。w

527 :デフォルトの名無しさん:2020/07/24(金) 20:07:01.97 ID:iJ+2fZSI.net
メモリが1TBあればヘーキヘーキ

528 :デフォルトの名無しさん:2020/07/24(金) 20:38:39.07 ID:So4dssPK.net
Stream 処理なら、バッファサイズ分のデータを、読んでは捨ててを繰り返すから、
必要なメモリサイズは、バッファサイズ分だけ

それか、seek みたいに、その番地をシークして、そこだけ書き換える

529 :511:2020/07/24(金) 21:01:04.13 ID:So4dssPK.net
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.62 ID:EkE5sKTE.net
まーだやってたのか
>>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 にするかな

531 :511:2020/07/24(金) 22:51:07.42 ID:So4dssPK.net
くれぐれも、データのバックアップを取っておいてから、実験しろよ。
もし、プログラムが間違っていたら、回復できないから

そもそも、他人のプログラムの意味が分からないのに、
それをそのまま実行するのは、非常に危険!

532 :532:2020/07/24(金) 23:35:26.56 ID:Z8MDOpZc.net
Binary fileをupdateモードでopenして
目的の位置にseekしpackで元のファイルの内容を直接書き換える方法なら

ttps://docstore.mik.ua/orelly/perl/cookbook/ch08_14.htm

533 :532:2020/07/24(金) 23:36:19.14 ID:Z8MDOpZc.net
>>530 と内容が被った…orz

534 :532:2020/07/24(金) 23:40:56.85 ID:Z8MDOpZc.net
この辺調べてやってくだされぃ
https://www.google.co.jp/search?q=perl+binary+file+update+open+seek+unpack

535 :532:2020/07/24(金) 23:45:28.89 ID:Z8MDOpZc.net
先生ッ、便利そうなモジュール見つけました!
https://metacpan.org/pod/File::Binary

536 :デフォルトの名無しさん:2020/07/24(金) 23:46:10.28 ID:JRbdBOQM.net
>>530
検証に時間がかかってしまって返信遅くなりました
できました!! ありがとうございました!

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

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

ここで「進捗状況表示(%)をさせるにはどうしたらいいですか?」とか聞くと嫌われることは、僕もいい大人なので知っています

537 :デフォルトの名無しさん:2020/07/24(金) 23:48:59.17 ID:JRbdBOQM.net
>>532
親切にありがとうございます

538 :デフォルトの名無しさん:2020/07/25(土) 00:54:10.29 ID:uhXYZAuD.net
進捗状況を表示させるには、最初にファイルサイズを取得する。
そして、データを書き換えるたびに、現在のseek 番地を取得して、

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

例えば、300 × 100 / 1,000 = 30 %

539 :デフォルトの名無しさん:2020/07/25(土) 01:23:46.28 ID:c7rlqrmm.net
>>538
レスありがとうございます
本当にうれしいのですがド素人なので理解出来ないのです

>>530のコマンドラインに絡めるかスクリプトにしていただけると卒倒するほど喜びます
これを機会にperlを勉強したいと(心から)思いますが、今の段階ではこんな図々しいお願いをするしか出来ません

540 :デフォルトの名無しさん:2020/07/25(土) 02:26:21.46 ID:GJL3/5bG.net
もうええやろ?

541 :デフォルトの名無しさん:2020/07/26(日) 01:36:51.87 ID:5SabrGL+.net
>>539
死ねよ

542 :デフォルトの名無しさん:2020/07/26(日) 02:35:47.46 ID:T0U3lDAz.net
勉強する気はなしか
やれやれ

543 :デフォルトの名無しさん:2020/07/26(日) 08:04:49.79 ID:faz+YmuJ.net
進捗表示は、計算自体は簡単だけど、ちゃんと見えるように表示するのが
ちょっと面倒なんだよな

544 :デフォルトの名無しさん:2020/07/26(日) 10:44:31.12 ID:KWzmTFSY.net
好きなのを使えばいいよ。
https://metacpan.org/search?q=progress+bar

545 :デフォルトの名無しさん:2020/07/26(日) 11:13:19.32 ID:faz+YmuJ.net
そんなもんがいちいちあるのか
まあ、凝ったことをするなら共通化はするだろうけど
凝ったことしなくても、どういう頻度で表示するかとかの調整は必要で、
UI特有の機能と関係ない面倒臭さの部分なんだよな

546 :デフォルトの名無しさん:2020/07/26(日) 13:26:52.37 ID:y3z4IjvW.net
ターミナルの機能を使いきるなら面倒だろうけど、ただ垂れ流すだけなら簡単やろ。

547 :デフォルトの名無しさん:2020/07/26(日) 18:32:06.33 ID:hRZi6+cn.net
>>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.42 ID:Y15FmTu1.net
>>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.03 ID:KvYX/iYh.net
>>548
いい加減にしろ

550 :デフォルトの名無しさん:2020/07/27(月) 07:32:32.55 ID:X6EMHfht.net
readして変更しないところまでprintするのは無駄なのに
無駄を省けば進捗表示がいらないくらい高速化するだろうに

551 :デフォルトの名無しさん:2020/07/27(月) 09:23:37.46 ID:HYhflFVx.net
コピーを作っておいて、そのコピーの一部だけ変更して書き戻せば一瞬
信頼性が上がったら、コピーは作らずにオリジナルを変更する

552 :デフォルトの名無しさん:2020/07/27(月) 10:25:37.74 ID:URSuW3yQ.net
>>550
ファイルサイズがGBレベルなら、そんなに速くはならんやろ。

553 :デフォルトの名無しさん:2020/07/27(月) 17:35:52.14 ID:X6EMHfht.net
ていうか >>548>>530 を参考にしてるのになんで遅い方を使ってるんだ

554 :デフォルトの名無しさん:2020/07/27(月) 18:21:31.29 ID:Y15FmTu1.net
呼ばれた気がしたので
約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 ID:KvYX/iYh.net
DRM解除の片棒担ぐ人達かね

556 :デフォルトの名無しさん:2020/07/27(月) 19:33:35 ID:HYhflFVx.net
なんて大層なDRMだ

557 :デフォルトの名無しさん:2020/07/27(月) 19:46:48 ID:Y15FmTu1.net
残念ながら暗号化解除まではされないんです
別の機器にコピーしようとしても「コピープロテクトがなんちゃら。。」と、ちゃんとハネられます
機器内の制限を緩くするためのオフホワイトな作業です

558 :デフォルトの名無しさん:2020/07/27(月) 20:24:22.40 ID:2I3xUck9.net
頭悪くてプログラムしかできなかった大企業CEO一覧
http://re-file.com/18k/1677/

559 :デフォルトの名無しさん:2020/07/27(月) 22:09:54.28 ID:P2Gsimd7.net
研究目的なら、犯罪の意思がないから、無罪だろ

560 :デフォルトの名無しさん:2020/07/27(月) 23:21:16.44 ID:Z4OWIfz1.net
>>559
理由は関係ないはず
秘匿目的で暗号化されているものを解読することそのものが犯罪

561 :デフォルトの名無しさん:2020/07/27(月) 23:23:00.46 ID:Dzov2n68.net
>>560
そんな事みんな知ってるよ

562 :デフォルトの名無しさん:2020/07/27(月) 23:33:36.72 ID:Dzov2n68.net
法律に詳しいオレってカッコいいだろう?

563 :デフォルトの名無しさん:2020/07/28(火) 00:29:51.31 ID:cSYuj1Eq.net
>>557
お前は裁判になって負けたら責任全部背負うのか?

564 :デフォルトの名無しさん:2020/07/28(火) 01:16:10.36 ID:YHRj/bUX.net
責任w

565 :デフォルトの名無しさん:2020/07/28(火) 01:21:05.81 ID:YHRj/bUX.net
暗号化解除してないので責任wないですぅ プ

566 :デフォルトの名無しさん:2020/07/28(火) 01:36:31.30 ID:Jzf+DoQ+.net
自称”法律専門家”の底辺ニート達が不毛な議論を展開すると予想

567 :デフォルトの名無しさん:2020/07/28(火) 01:48:48.45 ID:R7vB/BT5.net
コピー許可するフラグをいじるのは私的利用の範囲なら自由じゃないですか?
ここでその方法を聞いたりその答えを書いたりした人がどうなるかはわかりませんが

568 :デフォルトの名無しさん:2020/07/28(火) 02:17:19.93 ID:F+mRlQPD.net
>>567
他人が使うためにプログラムを公開することに問題がないとでも?

569 :デフォルトの名無しさん:2020/07/28(火) 02:23:12.72 ID:p8KDyqHY.net
Winnyの作者は捕まるが利用者は捕まらない
包丁の販売は捕まらないか利用者は捕まる事が有る
YouTubeであるけど包丁を自作して販売したら捕まるのか?

570 :デフォルトの名無しさん:2020/07/28(火) 02:35:26.47 ID:R7vB/BT5.net
>>568
コピー許可フラグを取り除くプログラムを公開することは問題ありと見ているわけですね
確かに東芝の全機種に対して動作可能であるなら影響は大きそうです

571 :デフォルトの名無しさん:2020/07/28(火) 05:40:11.08 ID:U3aN9PuQ.net
おかしな雲行きになってきたので説明(釈明)を

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

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

そしてこれは「暗号化解除」を目的としていません
ヘッダの一部分をちょっと弄っただけでプロテクトが外れるとか、幼稚園児ですか?
これはデータを細工して機器を「騙している」にすぎません

572 :デフォルトの名無しさん:2020/07/28(火) 05:41:52.28 ID:U3aN9PuQ.net
「暗号化解除ではない」と書いているのに裁判(w)とか責任(w)とか言ってる人って
字が読めないのか、頭が悪くて理解できないのか、あるいは目が見えないのか
10年前も当時の2ちゃんねる()で話題になって多くのスクリプトやプログラムも配布されました
彼らは訴えられたのかなぁ?心配です(棒

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

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

そして農家の朝は早い

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

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

以降、間抜けな人たちの「負け惜しみ」のレスが続きます
屁理屈、論点ずらし、人格否定など、つたない書き込みをしばらくの間お楽しみください
合わせて「おかしな雲行き まで読んだ」もお楽しみください

574 :デフォルトの名無しさん:2020/07/28(火) 06:49:13.06 ID:Z44sycP1.net
釣り堀する前に、Linuxインストールできるようになれよ。

575 :デフォルトの名無しさん:2020/07/28(火) 07:03:33.82 ID:U3aN9PuQ.net
Linuxで思い出したが、最新のUbuntuとかでは(仕様変更で)その機種の外付けHDDを「書き込み可」
でマウントできない
手動で”-RW”オプション付けてマウントしようとしてもダメ
書き込みできないからスクリプトもエラーになる
仕方ないのでUDF関連のソースファイルを弄ってカーネルをコンパイルしている
多分世界で私だけだと思う(そんな需要があるわけない)

>>574
頑張って

576 :デフォルトの名無しさん:2020/07/28(火) 07:08:12.80 ID:Z44sycP1.net
パソコンはコマンドが基本だからな。
コマンド出来るようになれよ。

577 :デフォルトの名無しさん:2020/07/28(火) 07:37:42.56 ID:s7pIWQUC.net
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 ID:DVrEteyf.net
>>571
あんた誰?

579 :デフォルトの名無しさん:2020/07/28(火) 14:31:17.47 ID:U3aN9PuQ.net
>>578
あんたは誰?
先に名乗って マヌケ

580 :デフォルトの名無しさん:2020/07/28(火) 15:14:32.97 ID:DVrEteyf.net
ひみちゅ

581 :デフォルトの名無しさん:2020/07/28(火) 16:12:16 ID:7IzxJUwl.net
>>580
なんかこの人好きやわ笑笑

582 :デフォルトの名無しさん:2020/07/28(火) 20:58:23.32 ID:U3aN9PuQ.net
約13GBのデータで(usb2.0)

2ch配布Linuxネイティブアプリ@10年前 64bit版
 12m10.357s
Perlスクリプト readあり
 12m5.101s
Perlスクリプト readなし
 8m38.678s

583 :デフォルトの名無しさん:2020/07/28(火) 21:18:54 ID:LCUSVvjE.net
>>582
死ね、クズ

584 :デフォルトの名無しさん:2020/07/28(火) 21:42:15.96 ID:7IzxJUwl.net
>>583
ネットでの暴言はインキャがすること。
てめぇはこうなれ!!!
http://re-file.com/18k/1669/ (結構グロ)

585 :デフォルトの名無しさん:2020/07/28(火) 21:51:29.80 ID:rf/YfV6w.net
殺したいほど嫌悪するような事か?
おそらく心の病気だから早く病院行った方がいい

586 :デフォルトの名無しさん:2020/07/28(火) 22:01:24.31 ID:7IzxJUwl.net
>>585
あの〜傍観者なのですが、これって584と583
どっちに言ってるんですか??

587 :デフォルトの名無しさん:2020/07/28(火) 22:22:07.89 ID:Jbl72Gtp.net
もっと争え

588 :デフォルトの名無しさん:2020/07/28(火) 22:27:18.25 ID:7IzxJUwl.net
ネットはこうでなくちゃ!明日の学校めんどいけど、この争いみたら
楽になれる!

589 :デフォルトの名無しさん:2020/07/28(火) 23:07:09.57 ID:rf/YfV6w.net
なぁお前らってホントにコード書けるの?
何でここにいるの?

590 :デフォルトの名無しさん:2020/07/28(火) 23:26:37.15 ID:rf/YfV6w.net
明日の学校とか五十過ぎのオッサンが恥ずかしくないのか?

591 :デフォルトの名無しさん:2020/07/28(火) 23:54:00.05 ID:7IzxJUwl.net
>>590
福岡県福岡市東区在住
西南学院中学二年〇組テニス部
学力推移調査:225/223位
全教研赤坂本校筑女,西南合同vクラス
明日の時間割英会話.社会.聖書.体育
(保護者面談なので4限授業)
頭は悪いがプログラムができるのでマークザッカーバーグ
のように校内snsをつくって流行らせようとしてます笑笑。
昨日、無断で水曜日に部活休んだのでめちゃくちゃ怒鳴られました。
明日の聖書は、「手紙」というくだらない日本映画を見ます。
今日は一時から「爆笑問題カウボーイ」というラジオがあるので、
monsterのんでずっと起きてます。2年になって運が悪いことに親しかった
友達は2組と五組に分かれてしまい、僕だけ〇組という
辺境の地に飛ばされました笑笑。好きなアーティストは「ずっと真夜中でいいのに」
という顔出ししていないバンドです。さっき5chのずとまよ専用スレで顔写真をみて、
とても美人だったので今すごくうれしいです。好きなサイトは、「リファイル」というグロサイトです。
「西南学院中学2年という名前でコメント投稿してるので、グッドボタン押して下さい。

592 :デフォルトの名無しさん:2020/07/28(火) 23:55:04.17 ID:V3SVLGoH.net
>>590
学校の先生かも知れんよ

593 :デフォルトの名無しさん:2020/07/28(火) 23:59:10 ID:7IzxJUwl.net
ほんとに信じてくれ!

594 :デフォルトの名無しさん:2020/07/29(水) 00:00:07.74 ID:hFsck1GX.net
>>592
全然信じてくれんやん笑笑

595 :デフォルトの名無しさん:2020/07/29(水) 00:01:21.85 ID:hFsck1GX.net
>>591
というか、こんなにネットにさらすのはやばかったかな?

596 :デフォルトの名無しさん:2020/07/29(水) 00:05:34.09 ID:hFsck1GX.net
>>590
逆に聞きますが、あなた五十過ぎのオッサン
何ですか?( ´∀` )

597 :デフォルトの名無しさん:2020/07/29(水) 00:11:56 ID:g1h81RwA.net
>>593
リアル厨房なら、perlなんかやめたほうがいいね。
python のほうがずっと言語仕様が綺麗で、複雑な処理も簡単にこなせる。
今、perlを使っているのはな、20年前からperlを使ってて、
他の言語に乗り換える気力も失ったオッサンばっかりだよ。

598 :デフォルトの名無しさん:2020/07/29(水) 00:13:37 ID:CwVjY0Ri.net
蛇より真珠のがキレイだ

599 :532:2020/07/29(水) 00:13:51 ID:gNILtmsT.net
python, goなど他の言語もやってますが

600 :デフォルトの名無しさん:2020/07/29(水) 00:19:14 ID:hFsck1GX.net
>>597
最近はperlよりphpに力を入れてます

601 :デフォルトの名無しさん:2020/07/29(水) 02:50:53.58 ID:ZD2Ud5DP.net
>>597
互換性重視ならPerlしか。
Rubyはとんでもないし、Pythonもあやしい。

602 :デフォルトの名無しさん:2020/07/29(水) 02:59:07 ID:TsNd4noZ.net
Kotlinもよろしく

603 :デフォルトの名無しさん:2020/07/29(水) 07:08:18.48 ID:q44g7qzE.net
問題
----
$flags に格納されているフラグ 0x40 をリセットして 0x00 にする
次の3通りの処理から採用する方法を理由を添えて答えなさい

   a. $flags = 0x00
   b. $flags = 0x00 if $flags == 0x40
   c. $flags &= ~0x40

604 :デフォルトの名無しさん:2020/07/29(水) 08:33:33.53 ID:W2ZwK0DF.net
でも、そこだけ書き換えて、ちゃんと動いたの?

もし、チェックサムがあれば、エラーになるはずだけど

605 :デフォルトの名無しさん:2020/07/29(水) 15:15:31.23 ID:opF1rrDZ.net
>>597
個人的にはサーバプログラムはgo
時点でpythonかな
perlはlinuxなら環境を選ばないという点で、シェルスクリプトはperl一択
それぞれに良さがある

606 :デフォルトの名無しさん:2020/07/31(金) 06:23:48.86 ID:uvjudIRN.net
>>603
a, b は他のビットが0になっても良い場合、及びbは他のビットが0の場合に動く。
cは
あ、ちょっと今書いてる時間ない。誰か他の人よろしく。

607 :デフォルトの名無しさん:2020/08/02(日) 05:05:52.61 ID:IlYSPDQE.net
Cは他のビットを崩さずに 0x40 の所のビット(2進だと01000000)だけ0にする。

608 :デフォルトの名無しさん:2020/08/02(日) 07:04:07 ID:MjfLntA9.net
何を 0x00 にするのか不明確な時点で出題者の頭が悪い。
a を意図しているなら 0x40 は関係ないし
b を意図しているなら「0x40 をリセットして」ではなく「0x40 がセットされていれば」と
書かれていなければならない。
ひょっとして、元の値が 0 だったらリセットしたことにはならないということか?
c を意図しているなら他のビットが全部 0 の場合に限り「$flags の値を 0x00 にする」
ことになるだろうが、そのようには書かれていない。
$flags & 0x40 を 0 にするということなら、 0x00 と表記するのは
値としては同じでも適切な表記なのか疑問が残る。
しかしこれが最も無理のない解釈だろう。
こんなに忖度させるようでは出題者は落第だ。

609 :デフォルトの名無しさん:2020/08/02(日) 07:43:03 ID:muADJDro.net
うわあ恥ずかしいやつが来ちゃった
>>603>>505 からの流れがあって出された問なのに・・・

610 :デフォルトの名無しさん:2020/08/02(日) 09:49:24.57 ID:LgIKwsTf.net
pythonいいけどちゃんと書かないとすぐバグるから気をつけてな

611 :デフォルトの名無しさん:2020/08/02(日) 10:05:23.75 ID:Vanmrtqf.net
perlもちゃんと書かないとバグるぞ

612 :デフォルトの名無しさん:2020/08/02(日) 12:33:21.72 ID:uvJ0AhRU.net
ちゃんと書かないで
バグらない言語ってあるのか?

613 :デフォルトの名無しさん:2020/08/02(日) 12:40:43 ID:L8TYFRoG.net
水掛け論でしょ 言語仕様を理解しないで適当に書いてちゃんと動くかどうかの話

614 :デフォルトの名無しさん:2020/08/02(日) 12:45:33.70 ID:Vanmrtqf.net
仕様からコードを自動生成すればバグらない
仕様はちゃんとしか書けないものとする

615 :デフォルトの名無しさん:2020/08/02(日) 15:01:47.55 ID:4gDW5awL.net
>>608
>>505をよろしくお願いします
美しいスクリプトを期待

616 :デフォルトの名無しさん:2020/08/02(日) 16:23:15.21 ID:qo03Ruan.net
また釣りのクズか

617 :デフォルトの名無しさん:2020/08/02(日) 17:01:54.34 ID:4gDW5awL.net
病気の人か
5ちゃんねるで悪態つくだけの惨めでみっともない人生

618 :デフォルトの名無しさん:2020/08/02(日) 17:05:00.79 ID:4gDW5awL.net
>>616
>>505をよろしくお願いします
期待していい?

619 :デフォルトの名無しさん:2020/08/02(日) 18:07:45 ID:JnzrulEq.net
>>617
死ね

620 :デフォルトの名無しさん:2020/08/02(日) 18:54:17.87 ID:4gDW5awL.net
効いたな

621 :デフォルトの名無しさん:2020/08/02(日) 19:26:37.18 ID:TAOBMMvc.net
>>614
数万人の天才が挑戦しているがいまだに達成していない

622 :デフォルトの名無しさん:2020/08/02(日) 19:41:56.53 ID:hIQzyyzC.net
>>621
むしろ天才よりも秀才のほうやろ。
本当の天才はそういうことに関わらん気がする。
直感的に不可能か、現実的に意味がないかを悟っていそうというか。

623 :デフォルトの名無しさん:2020/08/02(日) 20:29:18.39 ID:Vanmrtqf.net
バグの無いことの証明が不可能なのは、
ゲーデルの不完全性定理とかあのへんまで突っ込んでいくからであって、
99.9%okなら良しとする現実世界なら普通に可能

624 :デフォルトの名無しさん:2020/08/03(月) 23:11:06.80 ID:/fZxIKnK.net
>>623
そしてその0.1%が理由になって戦争になるわけですね

625 :デフォルトの名無しさん:2020/08/09(日) 01:00:36.25 ID:JDEJdFnx.net
過疎ってると落ち着く

626 :デフォルトの名無しさん:2020/08/13(木) 15:32:24.87 ID:g8OxF1lY.net
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.99 ID:HLH3bdVq.net
その出力先(ターミナル?コンソール?)は、そもそもシフトJISテキストを表示できるのか?
できない場合は、プログラムは関係なく、ターミナルが文字化けする。

ためしにtext.htmlのようなファイルに出力してから、その内容を確認したら?

628 :デフォルトの名無しさん:2020/08/13(木) 16:44:17.95 ID:DQVPr3Tq.net
前にやろうとして諦めた
pythonだと簡単

try:
  str_sjis = str.encode("CP932")
except UnicodeEncodeError:
  print str.encode("utf-8")

629 :デフォルトの名無しさん:2020/08/13(木) 16:48:34 ID:/BJ4BGZD.net
>>628
そのレベルならPerlでも簡単
絵文字だけ抜き出してHTML特殊文字化 でしょ

630 :デフォルトの名無しさん:2020/08/13(木) 17:00:11 ID:g8OxF1lY.net
>>627
ターミナルです
ファイルに出力してそれをShift-JISとして開いたら文字化けもなく見ることができました
内部的には問題なかったのですね
ありがとうございました

631 :デフォルトの名無しさん:2020/08/13(木) 22:25:11.59 ID:L5UfXSE8.net
>>628
笑わすんじゃねーw

632 :デフォルトの名無しさん:2020/08/15(土) 08:35:13.06 ID:ACgG3ouC.net
プロトタイプ属性の指定がどうやってもできん

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

これで構文エラーになる理由が全く分からん

633 :デフォルトの名無しさん:2020/08/15(土) 10:52:43.99 ID:N6F3nDZU.net
釣れますか?

634 :デフォルトの名無しさん:2020/08/15(土) 12:09:58 ID:ybTBju6n.net
同時には使えんやろ

635 :デフォルトの名無しさん:2020/08/15(土) 14:02:00 ID:ACgG3ouC.net
え????

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.40 ID:k2IZqmRY.net
以下のような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.08 ID:V1MJgzDn.net
そら一発では無理だろう
一旦配列に入れてから真ん中で分ける

638 :デフォルトの名無しさん:2020/08/15(土) 16:34:06.12 ID:o+i8zw5r.net
釣りに引っ掛かるな

639 :デフォルトの名無しさん:2020/08/15(土) 17:04:09.01 ID:gFfdk9Ij.net
>>636
はい。あります。

640 :デフォルトの名無しさん:2020/08/15(土) 19:50:33.78 ID:dQrORRCv.net
ちょろい問題。単なる初心者で釣りなんかじゃないでしょう。

@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.56 ID:dQrORRCv.net
2行目間違えてた。
while ($str =~ s{^[\s\S]*?<p>(.+?)</p>(.*)<p>(.+?)</p>[\s\S]*?$}{$2}){

642 :デフォルトの名無しさん:2020/08/15(土) 20:01:49.33 ID:UM/CpThf.net
# 元ネタ
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.33 ID:UM/CpThf.net
なんだこの糞改行(´・ω・`)


# 全部の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.28 ID:UM/CpThf.net
俺のは巨大なHTMLだとメモリが死ぬ
安全策なら>>640

645 :デフォルトの名無しさん:2020/08/15(土) 20:49:31.50 ID:ODJGcA2C.net
>>644
まあ、そんなに巨大だったら、どっちにしろ死ぬやろけどな。w
本気で心配するならチビチビつままないと。

646 :デフォルトの名無しさん:2020/08/16(日) 03:38:06 ID:Degs0Zl8.net
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.83 ID:Rc5RuLFB.net
Mechanizeでやれる?

648 :646:2020/08/16(日) 07:20:54.63 ID:Degs0Zl8.net
Mechanize とか、curl + Nokogiri でも、静的なページなら、DOM を取得できるけど、

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

5ch などは、空のHTMLを送ってきてから、
Ajax で、ページの内容を取得しているから、
HTMLをスクレイピングするだけでは、タイミングによっては内容が存在しない

649 :646:2020/08/16(日) 07:27:51.64 ID:Degs0Zl8.net
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 ID:Rc5RuLFB.net
プロテクトのつもりは無いんだろうけど、機械にやさしくない
最近だとメルカリのページ取得して、なんで空? と思った

651 :646:2020/08/16(日) 09:02:04.52 ID:Degs0Zl8.net
Selenium WebDriver なら、指定した要素が出現するまで、指定した時間だけ待ってくれる

漏れは、10〜20秒ぐらいを指定してる

652 :デフォルトの名無しさん:2020/08/16(日) 09:19:07.80 ID:Rc5RuLFB.net
webであれこれしたいなら、javaが近道なのは自明だな

653 :デフォルトの名無しさん:2020/08/16(日) 13:18:51 ID:YKxJCnVG.net
Javaは、なにをするにしても遠回りやろ。w

654 :デフォルトの名無しさん:2020/08/16(日) 14:20:54.02 ID:bYLilpPQ.net
逆にPerlできないことってなんだ?
ライブラリは揃ってるものとして

655 :デフォルトの名無しさん:2020/08/16(日) 15:22:58.74 ID:9u3LM4y1.net
あんまりない
弱いのはライブラリ面なので言語的に不足してる機能はそれほどない

656 :デフォルトの名無しさん:2020/08/16(日) 16:02:30.33 ID:0524gJdA.net
CPANを探してなかったという経験がないしな

657 :デフォルトの名無しさん:2020/08/16(日) 18:58:24.31 ID:5UHvUqAR.net
なら、C++があれば他の言語は要らなくなる。
さらに極言すれば、アセンブラがあれば他の言語は要らなくなる。

658 :デフォルトの名無しさん:2020/08/16(日) 19:02:50.27 ID:YKxJCnVG.net
GUIは弱い。
まあ強いと言っていいのはC#くらいだから、しゃあない?

659 :636:2020/08/16(日) 20:53:31.17 ID:we+09hKc.net
返信が遅くなってすいません
>>640,643,646
勉強になりました
ありがとうございました

660 :デフォルトの名無しさん:2020/08/17(月) 01:24:18.13 ID:U9ZmQUIp.net
GUI必要なツールはC#使うけど、CUIだけとか引数もなくて単に実行するだけとかそういうのだいたい全部Perlで書いてる

661 :デフォルトの名無しさん:2020/08/17(月) 07:07:29.41 ID:lN4Qioc8.net
GUIって結局、裾野の方々でも使えるようにする工夫であって、
テキストエディタで条件設定した方がよっぽど効率いい場合が殆どなのでは

自分専用ツールでGUIで作った記憶がない

662 :デフォルトの名無しさん:2020/08/17(月) 07:25:27.72 ID:KZ//oCQL.net
>>661
スマホのアプリはテキストエディタを使うのが主流か?

663 :デフォルトの名無しさん:2020/08/17(月) 07:41:47.99 ID:lN4Qioc8.net
スマホのは作ったことすらないけど、
CUIなんて選択肢がそもそもあるのか?

664 :デフォルトの名無しさん:2020/08/17(月) 10:16:26.85 ID:MSHB+00t.net
>>661
だからなに?
ああそう、とかいってほしいの?

665 :デフォルトの名無しさん:2020/08/17(月) 11:54:02.58 ID:p+skW/fD.net
PerlでスマホのGUI作れるんですか?

666 :デフォルトの名無しさん:2020/08/17(月) 12:04:54.68 ID:OdJd9Pxh.net
GUIが必要ないものはPerlでって話でしょ
これに噛み付いた>>661が意味不明

667 :デフォルトの名無しさん:2020/08/17(月) 12:18:14.46 ID:lN4Qioc8.net
噛みつかれた、と思っちゃうのが糖質なんだよな
書き込みがみんな攻撃に見えるっていう

668 :デフォルトの名無しさん:2020/08/17(月) 12:19:54.46 ID:p+skW/fD.net
>>653
だってJavaとPerlでスマホのGUIを比べるのがどうかしてる

669 :デフォルトの名無しさん:2020/08/17(月) 14:26:41.31 ID:MSHB+00t.net
>>667
わけがわからなすぎるからな。
攻撃に見えてもしゃあない。

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

で、本人はどういうつもりなの?

670 :デフォルトの名無しさん:2020/08/17(月) 15:10:53.35 ID:Y3iw4HO/.net
http://hissi.org/read.php/tech/20200817/TVNIQiswMHQ.html

>>669は聞きたい事が多い

671 :デフォルトの名無しさん:2020/08/17(月) 17:15:38.44 ID:fOsr3uhu.net
そうだねでいいんでね おれもそう思う
GUIがあった方がいいなって時はつければいいし

672 :デフォルトの名無しさん:2020/08/17(月) 18:21:33.00 ID:2KNIyB/f.net
あー。PerlでスマホのGUIか。書けたらいいな。
ていうか世界は広いからとっくの昔に誰かが作ってそう。

673 :デフォルトの名無しさん:2020/08/17(月) 22:59:27 ID:6nkEOrou.net
その昔はGUIといえばperlだったんだけどな

674 :デフォルトの名無しさん:2020/08/18(火) 01:35:21 ID:IZwRntbA.net
Perl(パール)[Pathological Eclectic Rubbish Lister]
Google翻訳[病理学的折衷的なゴミリスター]

どうしてこうなった?

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

オレはPerlではTk, Tkxしかやったこと無いけどさ

676 :デフォルトの名無しさん:2020/08/18(火) 02:46:33.41 ID:TScP2Zja.net
GUI必要がなら普通にWebアプリでいいと思う

677 :デフォルトの名無しさん:2020/08/18(火) 03:58:15 ID:R/jmWoBG.net
>>674
ラクダ本にそう書いてなかったっけ?

678 :デフォルトの名無しさん:2020/08/18(火) 04:26:54.25 ID:G86KA+uV.net
>>677
「病理的に異常な妥協を寄せ集めたゴミくずリストを作るものです」と?

679 :デフォルトの名無しさん:2020/08/18(火) 06:36:49.23 ID:bsH9de+P.net
処理が終わったらwindowsにポップアップを出すくらいでいいわ

680 :デフォルトの名無しさん:2020/08/18(火) 12:11:19.03 ID:1vCwIsCs.net
>>676
同感
適材適所
Perlは高度なバッチ処理が適所だと思う

681 :デフォルトの名無しさん:2020/08/18(火) 22:52:59 ID:MJ+frvDl.net
>>673
馬鹿?それとも釣り?

682 :デフォルトの名無しさん:2020/08/18(火) 23:26:43.99 ID:yJqh7w6C.net
>>681
perl/tk をご存じないのか?

683 :デフォルトの名無しさん:2020/08/18(火) 23:33:31.65 ID:bsH9de+P.net
やれるというのと、それを目標に人が集まってくるのは別

rubyのrailsとかpythonの機械学習とかみたいに、
GUIの為にperlを覚えたような奴を見たことない

684 :532:2020/08/19(水) 01:09:23.66 ID:jnnRlfyg.net
GUIのために言語を選ぶ?
少なくともperlにおいては、そんなことないだろJK

685 :デフォルトの名無しさん:2020/08/19(水) 01:48:37.55 ID:zoQbwZV2.net
>>682
そんなに出来のいいものではなかった記憶。
Tk自体も、Perlとのなじみかたも。

CでXを直接使うよりはマシに違いないが。

686 :デフォルトの名無しさん:2020/08/19(水) 02:10:38.31 ID:hChDa2LJ.net
>>682
その前にWindowsのGUIの方が普及しただろうが
あれはperlで書かれていたのか?
馬鹿は黙っていればいいのに

687 :デフォルトの名無しさん:2020/08/19(水) 03:51:07.71 ID:GjYS4Ydc.net
もはや何の話題だかわからん罠
CGIでPerlを使う話からどうやったらこんなカオスが生まれるのか

688 :デフォルトの名無しさん:2020/08/19(水) 04:27:02 ID:zJmcQroA.net
CGIの話なんかしてない

689 :デフォルトの名無しさん:2020/08/19(水) 07:00:19.93 ID:OrygHj4v.net
Microsoftが卑怯な手段を使ったから普及したのでは?

690 :デフォルトの名無しさん:2020/08/19(水) 11:45:52.26 ID:zoQbwZV2.net
Microsoftがどうこうというよりも、ほかがどんくさかっただけやろ。

Windowsは、メッセージループとかコピペとか、最初からけっこうこなれてたような。
どっちも、今ならあんな仕様にはきっとしてなさそうな気はするが、当時としてはなかなか。

691 :デフォルトの名無しさん:2020/08/20(木) 22:13:21.51 ID:ID9+Ua56.net
で、GUIと言えばperlと言われたのはいつの時代のどのアプリやOSなのかね
個人的な思い込みではなく

692 :デフォルトの名無しさん:2020/08/20(木) 22:27:06 ID:PnM8QZm3.net
多分、GUIとCGIを間違っている

693 :デフォルトの名無しさん:2020/08/20(木) 22:29:40 ID:Eg0HvHSQ.net
CUI + CGI = GUI

694 :デフォルトの名無しさん:2020/08/20(木) 23:31:14.76 ID:S0D8s+y7.net
GUCCI

695 :デフォルトの名無しさん:2020/08/21(金) 19:46:29.97 ID:T2XB7xYy.net
そういや Perl/tk はその後日本語対応うまくいったのかな?
最初使った時にダメでそれ以来使ってないのだが。

696 :デフォルトの名無しさん:2020/08/21(金) 23:08:48.53 ID:W/xJ14vU.net
perlはモジュールの品質が悪すぎたな
どうにでもかけすぎた上にperlのオブジェクト指向きつい感じ

697 :デフォルトの名無しさん:2020/08/22(土) 01:02:30.20 ID:mNPWH1ii.net
君はpythonかjavaでもやってなさい

698 :デフォルトの名無しさん:2020/08/22(土) 04:05:19 ID:sSvsNkf5.net
オブジェクト指向は万能じゃないからな

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

だから、大層なものである必要は全然なくて、メンバーとメソッドが使えるだけで十分便利

699 :デフォルトの名無しさん:2020/08/22(土) 18:52:55.61 ID:A1+CrrR8.net
データ(オブジェクト)を中心に処理を考えるみたいなのが発展してオブジェクト指向になったのでは?
どう発展して来たかは今更どうでも良い話だが。

700 :デフォルトの名無しさん:2020/08/22(土) 20:13:39.18 ID:V7i9nnyT.net
オブジェクト指向でやるようなアプリはPerlでやるべきではないと思ってる
Perlはバッチ処理一択

701 :デフォルトの名無しさん:2020/08/22(土) 20:25:54.19 ID:TIWYvQ38.net
別にOOPで作りたいならPerlでいい。
Perlは文字列を扱うスクリプトで本領を発揮するもんだけどね。

>>770
そもそも動的片付けの言語でOOPはクソだと思ってるわ。

702 :デフォルトの名無しさん:2020/08/22(土) 20:28:35.53 ID:TIWYvQ38.net
>>701
perl「でも」いい。

703 :デフォルトの名無しさん:2020/08/22(土) 20:57:54.05 ID:sSvsNkf5.net
膨大なライブラリはオブジェクト指向のお陰なのに
小規模なダクトテープ的な処理しかしない人には不要だろうけど

704 :デフォルトの名無しさん:2020/08/22(土) 21:21:00.81 ID:V7i9nnyT.net
>>703
ライブラリはその通りだった…

ただメインモジュールを上位でオーバーライドしてどうのこうのとか
そういうのはいい思い出無い

705 :デフォルトの名無しさん:2020/08/22(土) 21:22:47.78 ID:TIWYvQ38.net
>>703
Perlでダクトテープ以上のものを作ろうとは思わないから。
ま、しゃーない。

706 :デフォルトの名無しさん:2020/08/22(土) 23:16:49 ID:l6QJWt6E.net
GUIならPerlとか書いてた人はどうした?

707 :デフォルトの名無しさん:2020/08/27(木) 23:16:27.34 ID:1q6VaEiG.net
普段は過疎っているクセに誰かが質問を書き込んだ途端クソどうでもいいヤジ馬(質問には一切答えられない)がわらわらと湧いてくる

708 :デフォルトの名無しさん:2020/08/28(金) 11:01:54.67 ID:46MGlztH.net
数日前からLWPでhttpsにつながらなくなったんですが、verify_hostnameを無効にするとつながります
Windows 10、straberry perlなんですが、Windows側の証明書の問題とかあるのでしょうか?
Mozilla::CAなど関係しそうなモジュールは最新にしてみましたが、改善しませんでした

709 :デフォルトの名無しさん:2020/08/28(金) 12:46:24 ID:RBhGMmXK.net
>>708
復元ポイントに戻る

710 :708:2020/08/28(金) 13:20:47.23 ID:46MGlztH.net
>>709
直るかもしれないけど、また何かが更新されてダメになるよね
ほかにないですか?

711 :デフォルトの名無しさん:2020/08/28(金) 14:19:31.83 ID:hCb6zyPo.net
証明書関連なんだろうけど、サーバの証明書が悪化してしまったのでは
クライアントとしては無視しないといけない状態に

712 :デフォルトの名無しさん:2020/08/28(金) 15:04:08.50 ID:CzRmvnjE.net
Let's Encrypt みたいな無料の証明書を使っているサイトかも。
そういうサイトが多い

証明書の期限切れ

713 :デフォルトの名無しさん:2020/08/28(金) 15:59:10 ID:2oQuEAFk.net
>>708
特定サイト(接続先)の話でしょ?
そのサイトの証明書の期限切れだと思うよ

714 :708:2020/08/28(金) 18:25:47.79 ID:46MGlztH.net
レスありがとうございます
特定サイトではなく、また、ブラウザでアクセスできてLWPではできないという状況です
その後、セキュリティソフトにESETを使っているのですが、
ESETにブロックされていることが分かりました
Mozilla::CAの証明書が気に入らないのか、ESETの不具合なのか..
どちらかが更新されるのを待ちたいと思います

715 :デフォルトの名無しさん:2020/08/28(金) 21:31:54.57 ID:Evqv90T1.net
サーバーがオレオレ証明書だとそのエラーになる

716 :デフォルトの名無しさん:2020/08/28(金) 21:46:39.55 ID:hCb6zyPo.net
別にブラウザ作ってる訳でなし
どのサイトでも、ではなくて単に、複数の特定サイトでしょう

717 :708:2020/08/29(土) 10:51:10.89 ID:T8S0679o.net
確かにgoogleやyahooは大丈夫です
twitterはダメですが、こんな所もオレオレ証明書なんですか...

718 :デフォルトの名無しさん:2020/08/29(土) 11:09:22.43 ID:jSrLwW2w.net
けっこうキツい後だしやな。

719 :デフォルトの名無しさん:2020/09/03(木) 00:54:56.80 ID:ms0eH1iEx
【初の数学授業@】300年前に天才フェルマーが残した数学界最大の難問
https://www.youtube.com/watch?v=38U0Mhp3MbQ
【フェルマーの最終定理A】天才が残した300年前の難問に終止符
https://www.youtube.com/watch?v=12C8J7u6KKo
【数学をつくった天才たち@】数奇な運命を辿った愛すべき変人
https://www.youtube.com/watch?v=wy_L2CS4aXE
【暗号解読@】人類の歴史を変えた天才たちのドラマ
https://www.youtube.com/watch?v=7dSVR_zuJJs
【ブロックチェーン@】?5G時代の最終兵器「ブロックチェーン」人類の未来を変える大発明!?
https://www.youtube.com/watch?v=HfIqAQUPrjA
【サピエンス全史@】?1200万部突破の世界的ベストセラーを世界一わかりやすく解説?
https://www.youtube.com/watch?v=fud4-L2lnqQ
【金持ち父さん@】お金持ちになる手順
https://www.youtube.com/watch?v=57zybaVxc2o
【GIVE&TAKE@】与える人こそ成功する時代
https://www.youtube.com/watch?v=qTW80vS7_BQ

720 :デフォルトの名無しさん:2020/09/04(金) 11:45:52.13 ID:MZwyBFot.net
chocolateyでwindowsにstrawberry perlいれてたんだけど
upgradeしたらアンインストールされてインストールでこける
すでにインストール済みだとか、でも実態はアンインストール済み
どうすればいいのか

721 :デフォルトの名無しさん:2020/09/04(金) 12:13:42 ID:icCvRHhg.net
MSYS2に乗り換える。

722 :デフォルトの名無しさん:2020/09/04(金) 15:02:41.01 ID:TUoLkM+q.net
木こりが明日のためにと残しておいた大木が次の日になったらどうにも見つからない
来る日も来る日も探すけれどどこだったか思い出せずとうとう10年の月日が過ぎてしまった
そこで木こりは思い直してその辺にあった木を切り倒したそうだ
「はっ!?」木こりはようやく気付いた

a.「木なんてみな同じ」
b.「理想を追い求める自分に酔ってた」
c.「Windows入れ直せ」

723 :デフォルトの名無しさん:2020/09/04(金) 15:55:39.64 ID:2zp4/GYN.net
× 木こり
○ 林業従事者

724 :デフォルトの名無しさん:2020/09/04(金) 15:58:22.63 ID:i1o0tLie.net
Strawberry Perl 5.32.0 入れたんだけどcpanでinstallコマンドを使うとperl.exeがCPU消費したまま戻ってこなくなる現象が起きるね。

725 :デフォルトの名無しさん:2020/09/04(金) 16:02:36 ID:i1o0tLie.net
今までになくTkをインストールするのが大変だった、5.32.0。
ソース改変してcpanの外でgmake & gmake installせざるを得なかった。
さっさと修正してほしい。

726 :デフォルトの名無しさん:2020/09/04(金) 18:10:58.52 ID:4QR5o/NS.net
思い切ってPyQTにしてみろ。こっちのがいいぞ。

727 :デフォルトの名無しさん:2020/10/08(木) 23:36:20.91 ID:j69EnO8Y.net
こんな過疎ったクソスレだけど、たまにやって来る質問者をガヤが追い出そうと必死になるんだよな
頭の中どうなってんだろ

728 :デフォルトの名無しさん:2020/10/11(日) 18:23:11.86 ID:uVmgdJtU.net
すいません、あるサイトの記述で下みたいな構文なんだけど
$aiueo = [AAA =>123,BBB=>345];
変数は変えてあります
ハッシュのリファレンスとは違うようなんだけど何をやってるかわかりますか?
それと、この構文で123をprintで表示してみたいのですがどうやればいいのでしょうか

729 :デフォルトの名無しさん:2020/10/11(日) 18:26:38.16 ID:KfmOTZ8w.net
=>は,と同じなので単なる配列リファレンスです

730 :デフォルトの名無しさん:2020/10/11(日) 19:36:36.33 ID:LtBR6JI3.net
$$aiueo{AAA}
$aiueo->{AAA}
だっけ?

731 :デフォルトの名無しさん:2020/10/11(日) 20:54:29.02 ID:OOWRCRR6.net
一旦ハッシュ化しないと無理なのでは

732 :デフォルトの名無しさん:2020/10/11(日) 21:00:17.13 ID:Cs7yLb7a.net
だね。配列のままなら print $aiueo->[1];

733 :デフォルトの名無しさん:2020/10/11(日) 21:08:33.51 ID:OOWRCRR6.net
配列() のリファレンスが []
ハッシュ() のリファレンスが {}

というややこしい部分に引っかかって間違って書いてるだけと予想

734 :デフォルトの名無しさん:2020/10/11(日) 21:26:08.40 ID:KPje/k62.net
pseudo hash の話かと思ったら違った

735 :デフォルトの名無しさん:2020/10/20(火) 10:47:47.83 ID:D4H7EOaJ.net
教えて下さい。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 を使うためには、どのようにすればよろしいでしょうか?

736 :デフォルトの名無しさん:2020/10/20(火) 12:39:40.78 ID:JJDPr70D.net
環境変数からなら行けたような

737 :デフォルトの名無しさん:2020/10/20(火) 14:02:34.19 ID:D4H7EOaJ.net
>>736
ありがとうございました。
しかし、環境変数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

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

そこで、問題を単純化して、>>735を書きました。

739 :デフォルトの名無しさん:2020/10/20(火) 14:46:34.93 ID:JJDPr70D.net
なんでC:\なんか探しに行くんだろう

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

Active PerlはWin32::Pipeバンドルされてたはずなのでblib不要

741 :デフォルトの名無しさん:2020/10/20(火) 18:38:58.16 ID:D4H7EOaJ.net
>>740
よく解りました。ありがとうございました。

742 :デフォルトの名無しさん:2020/10/20(火) 21:44:35.79 ID:tFiyzFdf.net
blib.pmはちゃんとuseされていて、blib.pmの動作としてエラー終了したということですか

743 :デフォルトの名無しさん:2020/10/20(火) 22:27:40.87 ID:sh3hHW9L.net
die "Cannot find blib even in $dir\n" って blib.pm のソースに思いっきり書いてあるがな

744 :デフォルトの名無しさん:2020/10/20(火) 23:34:27.10 ID:tFiyzFdf.net
なるほd

745 :デフォルトの名無しさん:2020/10/25(日) 10:29:53.41 ID:eR26jTX4.net
ライブラリが読めてないのか、読めてるけどエラーになるのかの切り分けが必要だったな

746 :デフォルトの名無しさん:2020/10/25(日) 11:05:07.83 ID:/f/Br1ml.net
"¥n"なければ分かったのにね。

747 :デフォルトの名無しさん:2020/10/25(日) 11:49:26.86 ID:/f/Br1ml.net
あ、でもやってみたら@INCにない場合とメッセージ違うんだな。
とはいえ知らないと分からないよね。

748 :デフォルトの名無しさん:2020/10/27(火) 08:27:55.72 ID:K6PuV+RV.net
httpsをgetする楽な方法って何

749 :デフォルトの名無しさん:2020/10/27(火) 12:24:00.33 ID:FNX2BsFN.net
>>748
ブラウザを遠隔操作することだろうね。
昔、Win32::IEAutomation 使っていたけど、
今はどんなモジュールがいいのかよく解らない。

750 :デフォルトの名無しさん:2020/10/27(火) 22:34:11.97 ID:wfYFUdXE.net
>>748
Linux とかなら wget または curl コマンド。
Windows は知らないけど探せば同じコマンドあるんじゃないかな。
それとかPowerShellだと何かないか?ありそうだよな。俺知らないけど。

751 :デフォルトの名無しさん:2020/10/27(火) 23:05:01.31 ID:K6PuV+RV.net
難しいのう
firefoxから証明書をエクスポートして食わせてwgetしてもまだ成功しない

752 :デフォルトの名無しさん:2020/10/27(火) 23:53:21.84 ID:a7WAgl/q.net
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

753 :751:2020/10/28(水) 00:05:57.96 ID:H1Ljm7vl.net
Windows 10 には、curl.exe も入っている。
これは、PowerShell のcurl エイリアスとは異なる

コマンドプロンプトで、
where curl
C:\Windows\System32\curl.exe

754 :デフォルトの名無しさん:2020/10/28(水) 00:13:29.52 ID:BzF//FKs.net
なんで ruby が出てくるんだろう

755 :デフォルトの名無しさん:2020/10/28(水) 06:24:58.52 ID:SUh9rNlQ.net
lwpが出ない時代になったのか……

756 :532:2020/10/28(水) 08:36:56.65 ID:TnU9NEZC.net
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;

757 :デフォルトの名無しさん:2020/10/28(水) 08:42:17.53 ID:inVpsElI.net
なんでそんな大事なもんがインストール必要なんだ

758 :デフォルトの名無しさん:2020/10/28(水) 13:29:32.90 ID:l3R5yM/w.net
ネットワーク関連は、原則別扱いやろ。

759 :デフォルトの名無しさん:2020/10/28(水) 18:43:51.13 ID:14aXOJ7K.net
そこはマジで面倒だなと思うね
pythonのrequestsモジュールとか何も考えずにできるし

760 :デフォルトの名無しさん:2020/10/28(水) 19:30:04.62 ID:inVpsElI.net
電池は自分で買って下さい

761 :デフォルトの名無しさん:2020/10/28(水) 19:35:38.14 ID:ITw4VFJA.net
今ならコアモジュールのHTTP::Tinyで十分でしょう
IO::Socket::SSLかNet::SSLeay をインストールする必要がありますが
pythonだってrequests

762 :デフォルトの名無しさん:2020/10/28(水) 19:36:09.55 ID:ITw4VFJA.net
は自分で入れなきゃいけないし

763 :751:2020/10/28(水) 22:46:17.13 ID:H1Ljm7vl.net
Ruby なんて、よく使うものは、標準で入っている

Battery Included・電池付き言語

764 :デフォルトの名無しさん:2020/10/28(水) 22:58:53.02 ID:A4Y862UG.net
>>763
Rubyとかプログラム言語よりも「読点(、)」の使い方を学んだほうがいい
自分の書き込みを声に出して読んでみるとわかるよ

765 :デフォルトの名無しさん:2020/10/28(水) 23:18:21.09 ID:inVpsElI.net
読点の使い方に決まったルールは無いんだよな
なんとなく集合的に多数派の使い方はあるけど、
それを気にしてる人しか身につかないし、
気にしてない人はどういう使われ方をしてても何も思わない

多数派の使い方から外れると何か困るかというと、特に困らない
気にしてる人だけなんか変と思うだけで、意思疎通に支障は無い
気にした方が負けという悲しい現状がある

766 :532:2020/10/29(木) 00:33:18.30 ID:2QXtbAjf.net
そもそも言葉がそういうものだろ
だからかまわないというのは極論
というかそういう話もrubyも該当スレでやってくれ

767 :デフォルトの名無しさん:2020/10/29(木) 07:05:28.87 ID:vmIccHQe.net
読点は、基本的には使わない
意図的に区切りを入れたい箇所で使う
区切りを入れる目的がいろいろあって、それが理由で明文化できない

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

自分は、文節の区切りが漢字で連続しているあるいはひらがなで連続している時に、
読みやすさの為に入れることがよくある

768 :デフォルトの名無しさん:2020/10/29(木) 08:52:06.32 ID:z1UD/sEY.net
読点ふつうに使った文章でそれ言われても説得力ゼロやんな

769 :デフォルトの名無しさん:2020/10/29(木) 12:59:56.99 ID:DfWTURJR.net
普段文ではあんまり使わないかな 空白を使うようになった
てか。もあんまり使わない。改行するようになった。
これ最近の傾向ね。
ちゃんとした文章の時は学校で習ったようにちゃんとするよ。
たまに見かける、多用の文章はバカっぽくて好きになれない。

770 :デフォルトの名無しさん:2020/10/29(木) 16:41:07.61 ID:6ZxgJt1a.net
お前ら得意のうんちく・知ったかで生き生きしてるな
どうでもいい話題になると湧いてくるのな

771 :デフォルトの名無しさん:2020/10/29(木) 23:07:14.55 ID:XA006Kuj.net
Perl好きの住人がいるんだよ。
なんかネタがあると湧いてくるが自分からは投入しない。
というか今更ないんだよな。

772 :デフォルトの名無しさん:2020/10/30(金) 08:36:37.09 ID:yt6Q5TzG.net
LWP::Protocol::https はインストールしなくても入ってるみたいだけど、
やっぱりアクセスできない

773 :デフォルトの名無しさん:2020/10/30(金) 14:14:14.77 ID:Nsw5dj/j.net
>>771
かつてのPerlハッカーたちが完全に沈黙してるからね
Rakuとかもっと使えよって思います

774 :デフォルトの名無しさん:2020/10/30(金) 14:28:46.49 ID:NEqe6Fpq.net
IO::Socket::SSLかNet::SSLかが入ってないんじゃね?

775 :デフォルトの名無しさん:2020/10/30(金) 14:45:50.35 ID:yt6Q5TzG.net
入ってなかったら入ってないというエラーになるんじゃないのかな
プロトコルのエラーになるんだよな

776 :デフォルトの名無しさん:2020/10/30(金) 16:51:58.64 ID:yPjXBzu5.net
>>773
Perl6できたてのころにちょっと試したけど、スクリプト言語的な使いやすさがなくなってたからなあ。
きっと普及せんやろな、と思った。

777 :デフォルトの名無しさん:2020/10/30(金) 17:12:05.20 ID:X2Arn8L3.net
Strawberry Perl 5.32 向けのTk、相変わらずビルドエラーを手動修正しないとインストールできない。
バンドルされているコンパイル環境の問題かもしれないけど、そのままってのはちょっと。
Tkって重要じゃね?どうよ?

778 :デフォルトの名無しさん:2020/10/30(金) 17:49:50.64 ID:Nsw5dj/j.net
>>776
ほんのちょっと改善するだけでも十分だったのにな

779 :デフォルトの名無しさん:2020/10/30(金) 19:26:17.53 ID:yPjXBzu5.net
>>778
いや、大きな追加機能自体はおもしろそうなんだよ?
Grammarとか。

また、識別子にハイフンが使えるとか、トークンの区切りが原則はスペースとか、文法も興味深いかわりに、ほかと違いすぎて。。。

780 :デフォルトの名無しさん:2020/10/30(金) 19:42:16.02 ID:Nsw5dj/j.net
>>779
grammarは一見良さそうだけど字句解析と構文解析を同時にやる感じですげー難しくない?

781 :デフォルトの名無しさん:2020/10/30(金) 20:46:03.54 ID:J8RJfKX8.net
字句解析と構文解析は、表を使ったアルゴリズム自体は同一なので、一つの表にまとめられる。
しかし、分離できる場所で分離した場合に比べて表が大きくなるので、あまりお得じゃないと思う。
もちろん数ギガバイトのメモリーを積む現代のコンピュータでは、100メガバイトの表は決して非現実的ではないけれども。
ドラゴンブックが書かれた時代には、分けなければ実装できない程度の大きさだったと思う。

782 :デフォルトの名無しさん:2020/10/30(金) 21:02:37.09 ID:yPjXBzu5.net
>>780
いやー、ちゃんと使ってみたかった。
難しいならそれを体感したかったな。

lex/yaccのめんどくささは知ってるけど、あれよりはマシやろ。w
C#のSpracheみたいなもんじゃないの?

783 :デフォルトの名無しさん:2020/10/30(金) 21:50:10.07 ID:9WzSAA4o.net
>>775
例えばlwp-downloadとかでもアクセスできない?

784 :デフォルトの名無しさん:2020/10/30(金) 22:09:51.09 ID:Nsw5dj/j.net
>>782
アルゴリズムが違うからなんとも言えんが
バックトラックしないのでカーソルの位置を常に意識しなきゃいけないのがすごくキツい
あこれマッチしないの?ってことが多々あって慣れなんだろうがキツい
デバッグも大変

785 :532:2020/10/30(金) 22:24:35.54 ID:QEBk4Q6j.net
Perl5のParse::RecDescent.を使えれば
Perl6のGrammarも大丈夫だと思う

多分

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

https://mattn.kaoriya.net/software/lang/perl6/20151019183138.htm

787 :デフォルトの名無しさん:2020/11/02(月) 15:05:38.99 ID:iEycKQwb.net
Raku の Grammar というのは、「クラス定義+演算子のオーバーロード」
と比較して、何が優れているのだろうか?

788 :デフォルトの名無しさん:2020/11/02(月) 17:51:29.15 ID:ew0mgVfp.net
えっ。
ターゲットというか、適用領域が違うんでは。

789 :デフォルトの名無しさん:2020/11/13(金) 10:25:46.33 ID:ZCyQI0Un.net
処理済みかとか、除外対象か、みたいなチェック用に
%except = (aaa => 1, bbb => 1);
みたいなテーブルを作っておいて、
if (!$except{$x}) { ... }
みたいなことをする

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

なんとか判定をシンプルに書けないものか

790 :デフォルトの名無しさん:2020/11/13(金) 10:43:18.63 ID:IuUtHHuD.net
リストを使用してのケースなら
" @except " =~ / aaa /
とか。

791 :デフォルトの名無しさん:2020/11/13(金) 10:53:46.81 ID:IuUtHHuD.net
でもハッシュの方がよくないかなあ。
%except = map { $_, 1 } qw(aaa bbb ...);
とか
undef $except{$_} for qw(aaa bbb ...);
で判定はexists
とか

792 :デフォルトの名無しさん:2020/11/13(金) 11:34:25.97 ID:4qY0TlDt.net
>>789
無駄に見えるのは気のせいなので、気にするな。
何が気に入らないのか、意味不明なレベル。

せいぜいが判定をexists()に変えるくらいか。
でも、処理の意図は明確になっても、記述量は増えてまう。
結局、もとのほうがいい。

793 :デフォルトの名無しさん:2020/11/13(金) 11:54:00.35 ID:ZCyQI0Un.net
pythonのin演算子を真似た関数を用意するくらいか

794 :デフォルトの名無しさん:2020/11/13(金) 13:04:35.51 ID:f6yctSrL.net
ここの人ってpythonもできるの?
pythonを最近覚えたんだけど、pythonで書き始めてからperlに戻る気がしないw

795 :デフォルトの名無しさん:2020/11/13(金) 13:11:47.54 ID:ZCyQI0Un.net
常にuse strictで書いてるような人はpythonの方がいいかも

危険を承知でとにかく楽に、という書き方がpythonはできない

796 :デフォルトの名無しさん:2020/11/13(金) 17:55:04.27 ID:IGEbWGrX.net
>>794
pythonも書いてるけど感覚としてはそこまで差はない
pythonの方が厳格ですぐエラー吐いてくれるから
それを良しとするか
あとはライブラリの質が段違い

797 :デフォルトの名無しさん:2020/11/17(火) 17:45:06.40 ID:jAzXruH+.net
デフォルト以外のブラウザを開くことはできませんか?
デフォはこれでいけてます
use Win32::FileOp qw(ShellExecute);
ShellExecute($url);.

798 :デフォルトの名無しさん:2020/11/17(火) 23:05:44.09 ID:cjOqkcds.net
例えば、デフォが他のブラウザで、あるurlをFirefoxPortableで開きたいとき、
次のようなコマンドを実行させているが、これをPerlでやればいいんじゃないの?

"U:/FirefoxPortable/FirefoxPortable.exe" https://foo/bar/

799 :デフォルトの名無しさん:2020/11/18(水) 00:40:53.82 ID:T6Vtm1bs.net
ありがとう
`C:/Program Files (x86)/Google/Chrome/Application/chrome.exe`
とりあえずここまででchrome開くことはできたのですがURLの指定はできないでしょうか?

800 :デフォルトの名無しさん:2020/11/18(水) 01:11:22.59 ID:OSmP9Gk2.net
>>799
>>798

801 :デフォルトの名無しさん:2020/11/18(水) 01:32:09.00 ID:T6Vtm1bs.net
system("\"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe\" https://www.yahoo.co.jp/");
完成しました
ありがとうございました。

802 :デフォルトの名無しさん:2020/11/18(水) 08:31:15.08 ID:XTvONPVJ.net
>>801
wperl.exeからsystem()を呼び出すと新しいコンソールウィンドウが開くので要注意。

803 :デフォルトの名無しさん:2020/11/28(土) 15:40:18.08 ID:EM73A4Gg.net
指定した年月日からx日後の日付を数で得るにはどうするのが一番楽だろう

804 :デフォルトの名無しさん:2020/11/28(土) 18:31:31.18 ID:1bDz9VeK.net
「数で得る」というのがよく解らないが、timelocal()とlocaltime()を使えば、
多分、やりたいことができると思う。

805 :デフォルトの名無しさん:2020/12/03(木) 17:27:36.92 ID:PrWVOzOn.net
これから仕事ではじめてperlを使うんだけど、メッセージやメール出力などにマルチ言語対応が入ってる
resourceに言語ファイルをいれる形で実現したいけど、どのようにするのがいいか教えて下さい

複数のスクリプトを開発して連係させる予定

806 :デフォルトの名無しさん:2020/12/05(土) 13:44:54.28 ID:DP7JjxAq.net
ヒアドキュメントの中で数式を使うやり方は?
@{[数式]}
のようにやってもエラーで動かなかった

807 :デフォルトの名無しさん:2020/12/05(土) 15:34:53.50 ID:3OUqO/Qz.net
>>803
Ruby on Rails なら、時刻計算用のライブラリがある

require 'active_support/time'

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

出力。うるう年
Sun, 01 Mar 2020

808 :デフォルトの名無しさん:2020/12/05(土) 15:43:47.69 ID:+/FrBp4K.net
そんな感じの気楽で使いたい

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

こんなん

809 :デフォルトの名無しさん:2020/12/05(土) 16:43:15.39 ID:dBHdheKW.net
>>806
おかしいな。それで合ってるように思えるんだが。
この辺りを読んで、何か誤解してないか確認したらいいかも。
https://perldoc.jp/docs/perl/5.26.1/perlref.pod

810 :806:2020/12/05(土) 18:18:59.36 ID:3OUqO/Qz.net
「perl 時刻 計算」で検索すれば?

日付・時刻を扱う標準モジュール、Time::Piece が標準で添付されています。
もっと便利なモジュールを、誰かが作っているかも

811 :デフォルトの名無しさん:2020/12/05(土) 18:31:57.30 ID:+/FrBp4K.net
localtimeからスタートする時はそれが便利
何か基準の日付から計算しようとすると面倒になる

812 :デフォルトの名無しさん:2020/12/05(土) 20:29:02.43 ID:5ARiBM7n.net
>>806
数式自体にエラーがあるんやろ。w
じゃなきゃエラーをはれ。

813 :デフォルトの名無しさん:2020/12/05(土) 23:54:20.43 ID:DP7JjxAq.net
>>812
print <<"eos";
@{[print "aaawww";]}
eos

これでエラーだった

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

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

しかし、それだとうまくいっても「aaawww1」と表示される気がするが、どうなの?w

815 :532:2020/12/06(日) 00:15:36.74 ID:1Uj+ZrCS.net
print <<"eos";
@{[print "aaawww"]}
eos

$ perl aaawww.pl
aaawww1


;を省くと動くが、「1」とか余計なものがつくな

816 :デフォルトの名無しさん:2020/12/06(日) 00:43:41.05 ID:Znd8Qdfl.net
>>814
CGI 実行エラー syntax error at test.cgi line 10, near ""aaawww";"
Execution of test.cgi aborted due to compilation errors.

817 :デフォルトの名無しさん:2020/12/06(日) 01:06:20.00 ID:rqNKNacS.net
単なる構文エラー
無名リストの中に裸のセミコロンがあったらまずいでしょ
["A", "B", 3, ";"] OK
["A", "B", 3, ;] エラー

余計な1じゃなくてprint関数の返り値
printが成功したので真(1)を返して無名リストの要素になった
printで"aaawww"が表示された後デリファレンスされて展開された1がヒアドキュメントで表示される

818 :デフォルトの名無しさん:2020/12/06(日) 01:06:31.00 ID:GZ1arJtc.net
>>815
仕様どおり。w
記述したとおりに正しく動作しているな。

819 :デフォルトの名無しさん:2020/12/06(日) 01:19:08.97 ID:d/9HsImJ.net
>>803
今更だけど日付をエポック秒で表して日数×24*60*60を足すんじゃだめ?

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

もし今後UTCとかJSTとか出てきたときはそのときまた考える。

820 :デフォルトの名無しさん:2020/12/06(日) 02:06:04.21 ID:fHRDTQ7E.net
PerlのYAML関連のモジュールが全部重くて厳しい
高速なYAMLモジュールはないのか?

821 :デフォルトの名無しさん:2020/12/06(日) 10:37:45.21 ID:kLx/M/5Z.net
まずは高速なCのライブラリを見つけます

822 :デフォルトの名無しさん:2020/12/06(日) 11:42:16.72 ID:BlX3SIQO.net
>>804 だが、>>803 の質問は>>804 で終わったと思ったのだが、不親切だった?
例えば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";

823 :デフォルトの名無しさん :2020/12/06(日) 11:58:40.89 ID:5Rf1GOX10.net
見るからに面倒臭い

824 :デフォルトの名無しさん:2020/12/07(月) 09:18:58.50 ID:zfvnE2zk.net
$basetime = timelocal_nocheck($sec, $min, $hours, $mday+$intvl, $mon-1, $year-1900);

825 :デフォルトの名無しさん:2020/12/07(月) 09:43:24.77 ID:UAiCPmDo.net
Time::Piece はよくできてて、何かのログとかに現在時刻を書き出す、
とかの用途には十分に使える

でも、時刻計算や日数計算はあまり考慮されていない
現在時刻からの計算はできても、任意の時刻からだと弱い

826 :デフォルトの名無しさん:2020/12/07(月) 14:03:32.45 ID:tC78i6pr.net
>>808

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";

827 :デフォルトの名無しさん:2020/12/07(月) 14:21:35.27 ID:UAiCPmDo.net
まあ、strptime さえ目を瞑れば
こんなもん、何か見ないと書けない

828 :デフォルトの名無しさん:2020/12/07(月) 15:40:13.93 ID:15jj6qfl.net
use POSIX; を宣言してCの標準関数に似た時刻処理機能を使うのが普通じゃないの?
Cの時刻処理サンプルコードを円滑にPerlに移植できるよ。

829 :デフォルトの名無しさん:2020/12/07(月) 17:17:12.82 ID:VC6/tHTg.net
>>827
DateTimeモジュール使えば全て解決なんだが
クソデカくて重いという弱点が

830 :532:2020/12/07(月) 21:57:48.14 ID:WG5ppFXF.net
Time::Pieceの弱点は
strptime()で作ったインスタンスのtimeゾーンをいじれないとこかな?
後1つなんか弱手あった気がするが忘れた

831 :デフォルトの名無しさん:2020/12/07(月) 22:38:30.88 ID:UAiCPmDo.net
strptimeはpythonでもrubyでも同じだから、もう慣れなんだろうな
'YYYY-MM-DD' とかではあかんかったのか

832 :デフォルトの名無しさん:2020/12/08(火) 04:35:26.34 ID:65P2yCaW.net
>>822
timeLocal()の年は1900引かない方がいいよ。これちょっとCのライブラリとは違うんだよ。詳しくはドキュメント読んで。

833 :デフォルトの名無しさん:2020/12/08(火) 04:36:34.48 ID:65P2yCaW.net
あ。タイプミス。timelocal()ね。

834 :デフォルトの名無しさん:2020/12/08(火) 23:53:37.62 ID:VS4VHEi1.net
すみません、ソートで教えて欲しいんですが下記のようにみたいな枝番号が付いてる文字列をハッシュのキーとして
ハイフン前の数値でソートした後にハイフン後の数値でソートしたいのですが
普通に$a <=> $bだとハイフンの後の値がバラバラになって上手くいきません
キーを作る際に別々に作ってループ増やすくらいしか自分には解決方法が無いのですが、スマートに出来る方法は無いのでしょうか?
1-1
1-2
2-1
2-2
3-1

835 :デフォルトの名無しさん:2020/12/09(水) 00:31:36.73 ID:LWKBPFtb.net
>>834
シュワルツ変換で検索!

たとえば :
mapでソート用の値として、前の数字×10000+後ろの数字の値をつくって、それともとの値のペアにする。
それを<=>でソートする。
mapで、ソート結果からもとのデータ部分を取り出す。

836 :デフォルトの名無しさん:2020/12/09(水) 00:39:46.90 ID:LWKBPFtb.net
要は、map{...} sort{...} map{...}となる。
変換のためのループが2回入る(map)が、記述としてはあっさりなので、特殊なソートをしたいときにはよく使われる有名な方法。

伝わるかな?w

837 :デフォルトの名無しさん:2020/12/09(水) 08:45:38.11 ID:UMU4oc+t.net
それで書けるなら、sort { } でも書けるよね

838 :デフォルトの名無しさん:2020/12/09(水) 09:35:02.27 ID:sn/SI4a+.net
>>834
こんな感じかな。デバッグはしていないが。
@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;
}

839 :デフォルトの名無しさん:2020/12/09(水) 10:27:05.71 ID:LWKBPFtb.net
>>837,>>838
それだと、要素の比較のたびに、値の変換処理が行われる。
比較は何度も行われるため、変換処理が軽くない場合、ソート全体としてかなり重くなりうる。
すくなくとも「スマート」とは言えない。

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

知らんならググれ。

840 :デフォルトの名無しさん:2020/12/09(水) 10:46:35.52 ID:zREBomTd.net
sort { s1($a) <=> s1($b) } keys %x;

sub s1 {
shift =~ /(¥d+)-(¥d+)/ && 100*$1+$2
}
sortならこんなかんじ

841 :デフォルトの名無しさん:2020/12/09(水) 10:47:56.70 ID:UMU4oc+t.net
順番が変わるだけで処理量は変わらんでしょう
どっちにしろ重い

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

有効な局面もあるんだろうけど、今回に関してはトリッキーなだけでメリットがない

842 :デフォルトの名無しさん:2020/12/09(水) 10:51:05.82 ID:UMU4oc+t.net
次のソートじゃなくて、1回のソート内部の複数の比較に対してか
あー、確かに速くなりそうな気がする
処理系が気を利かせて変わらない気もする

843 :デフォルトの名無しさん:2020/12/09(水) 11:29:48.25 ID:LWKBPFtb.net
>>842
ソートの内部処理が想像できんのか?
もとの並び方にはよるが、ふつうは大きく異なる。
「処理系」とやらが気を利かせられる範疇ではない。

比較処理にsayでもいれて試してみろっつーんだよ。

844 :デフォルトの名無しさん:2020/12/09(水) 12:58:19.84 ID:UMU4oc+t.net
内部の話だからsayでは判らんだろ

関数で評価しないといけないと判っていて、動的に処理する必要も無いんだから、
評価済みのテーブルを内部に持たせようというのは自然な発想

845 :デフォルトの名無しさん:2020/12/09(水) 13:12:15.55 ID:/81rDyGm.net
>>844
試してから言え。
きっと、想像以上の出力が出てきて驚くから。

846 :デフォルトの名無しさん:2020/12/09(水) 13:44:43.94 ID:UMU4oc+t.net
判ってないのかな

処理速度に配慮した処理系があっても不思議ではないという話
手元で試して遅かったとしても、全ての処理系に対する証明にはならない

847 :デフォルトの名無しさん:2020/12/09(水) 14:16:41.19 ID:AA5LXV3h.net
>>846
痛々しいからもうやめとけ

848 :デフォルトの名無しさん:2020/12/09(水) 14:32:22.15 ID:LWKBPFtb.net
>>846
Perlの「全ての処理系」て。w

849 :デフォルトの名無しさん:2020/12/09(水) 15:17:55.01 ID:UMU4oc+t.net
そもそも重いかどうかが疑問で、どっちでやっても一瞬で終わるのが普通
それなら読みやすい方が優れている
重くて困ってから対策を考えればいい

850 :デフォルトの名無しさん:2020/12/09(水) 16:44:07.55 ID:qaSCdqDS.net
map {
$_->[0];
} sort {
$a->[1] <=> $b->[1] || $a->[2] <=> $b->[2];
} map {
[$_, /(\d+)/g ];
}

読みにくい…かなあ?

851 :デフォルトの名無しさん:2020/12/09(水) 17:06:18.35 ID:8NKLSi5o.net
>>850
他の言語の人が見たら発狂しそう

852 :デフォルトの名無しさん:2020/12/09(水) 18:15:36.35 ID:UMU4oc+t.net
別に短く書かなくていいんだよ

@r = sort s2 @a;

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

sub s2 {
  return s1($a) <=> s1($b);
}

853 :デフォルトの名無しさん:2020/12/09(水) 18:16:58.18 ID:xAMitlRd.net
発狂しない人が使えば良いよ

854 :デフォルトの名無しさん:2020/12/09(水) 19:43:12.41 ID:LWKBPFtb.net
>>849
おまえ、ハードな処理を実装したことがないやろ?w

慣れたPerl使いはわざわざ>>852みたいなコードは書かない。
遅いし、くどくて逆に読みにくいからな。

855 :デフォルトの名無しさん:2020/12/09(水) 19:45:15.15 ID:LWKBPFtb.net
>>851
C#でも、タプルが使えるようになったので、似たようなコードは書く。
LINQなぶんだけPerlより読みやすいけど。

856 :デフォルトの名無しさん:2020/12/09(水) 22:17:09.12 ID:rsuX7ND7.net
ハッシュテーブルにs1($val)の戻り値を保存して、そのハッシュテーブルを使って比較関数を呼び出すとかするのが普通でしょ。

857 :849:2020/12/10(木) 06:03:00.77 ID:+FxPMgzN.net
読みやすい優れたコードが >>852 か。
自分のコードを出してくれた点は評価するが
$1 * 100 + $2
って何?

858 :デフォルトの名無しさん:2020/12/10(木) 16:08:39.86 ID:smJEm1Fb.net
2桁前提なんだろうな

859 :デフォルトの名無しさん:2020/12/10(木) 19:59:40.99 ID:g17Qy/zb.net
>>858
>>835なら4桁までイケる。w

860 :デフォルトの名無しさん:2020/12/11(金) 03:24:48.11 ID:lklp228q.net
考え方は同じだけど最初からソート用の値をデータに持たせてみる。
my %x = (
'3-1' => ['e', 301],
'1-2' => ['b', 102],
.... ,
);

sort { $x{$a}[1] <=> $x{$b}[1] } keys %x;

861 :デフォルトの名無しさん:2020/12/11(金) 03:42:00.36 ID:Hz2bdcAQ.net
複数キーでのソートに帰着させるべきなんだろうな
1-1-1 も許容する、とかになった瞬間に破綻する

862 :デフォルトの名無しさん:2020/12/11(金) 04:01:52.35 ID:Hz2bdcAQ.net
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;
}

863 :856:2020/12/11(金) 06:10:31.03 ID:LwDR4/oY.net
>> 833 には数値の値域については何も書かれてないんだから
勝手に想定しない方がいいと想うよ。
どうしても比較を簡略化したいなら pack 関数で数値を全部
ビッグエンディアンで並べればいいんじゃないかな。

864 :デフォルトの名無しさん:2020/12/11(金) 10:41:01.46 ID:vQm1aiEb.net
>>861
最初から想定されてるのでなければ、ひどい仕様変更なんだから、実装変更もやむなしやろ。
数字じゃなくてアルファベットにします、と言われただけでパーやし。w

865 :デフォルトの名無しさん:2020/12/11(金) 10:50:54.59 ID:vQm1aiEb.net
>>863
勝手に想定するのもあたりまえ。
じゃないと、なんにも例示できなくなるで?

値域がどうこうなんか、自分でなんとでもすればいいだけ。
本題のソートには関係ない。

866 :デフォルトの名無しさん:2020/12/11(金) 11:20:18.13 ID:Hz2bdcAQ.net
1-1があるなら1-1-1もあると予測するのは自然な拡張
1-1-1-... に無限に対応できるように作っておいて、
その特殊ケースとして要件を満たす、で十分

アルファベットにも対応するのは次元が違う

867 :デフォルトの名無しさん:2020/12/11(金) 19:40:49.33 ID:V1LdBVWq.net
>>865
こういうひとがコーディングすると
バッブァオーバーランとか起こしてセキュリティに穴を開けるんだな

868 :デフォルトの名無しさん:2020/12/11(金) 20:46:31.45 ID:vQm1aiEb.net
>>867
アホなの?
他人のコードのバッファオーバーランなんか知らんわ。
自分で責任を持て。

869 :デフォルトの名無しさん:2020/12/11(金) 21:01:49.19 ID:jm3zE7RU.net
普段は過疎ってるのに少し書き込みがあるとクソ雑魚が湧いてきてグズグズ文句たれる
頭の中どうなってんだろうな

870 :デフォルトの名無しさん:2020/12/11(金) 22:34:31.89 ID:Hz2bdcAQ.net
んでんでんで

871 :デフォルトの名無しさん:2020/12/11(金) 22:41:46.66 ID:pFqzegRi.net
>>838 だが、実は、このコードは、オレが実際に、数字とかアルファベットとかが
複雑に絡んだ文字列を、ある規則に従ってソートするために作ったものを
流用したんだ。だから、応用範囲が広いという点では、これがいいと思うけどな。

872 :デフォルトの名無しさん:2020/12/11(金) 22:48:30.39 ID:Hz2bdcAQ.net
sortの関数って@_で受けれるの?

873 :デフォルトの名無しさん:2020/12/11(金) 23:30:45.59 ID:vQm1aiEb.net
>>871
にしたって、超激遅やで?
要素数が充分に少なきゃええけど。

874 :デフォルトの名無しさん:2020/12/11(金) 23:38:00.26 ID:Hz2bdcAQ.net
どう見ても章のタイトルとかそんなんなので、1000も無いよ
高速化の工夫は遅くて困ってから

875 :532:2020/12/12(土) 00:28:14.42 ID:tTwN9OuS.net
>>834
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()関数のアルゴリズムに依存しない書き方がしたいなら
左と右の数値で二段階のソートをするか、右の数字と左の数値で順位に一貫性のあるキーを作って
一段階のソートで済ませる方法もあると思う。

そういったサンプル実装を見たいのであれば、時間があればくけれども…

876 :532:2020/12/12(土) 00:42:28.87 ID:tTwN9OuS.net
つか、実は Tie::IxHash を使ってhashに登録したデータの順番を維持して取り出せれば
いいだけの話だったりしてな。しらんけど

877 :デフォルトの名無しさん:2020/12/12(土) 00:47:36.64 ID:iq4I9JA8.net
>>868
アホだなあ

878 :532:2020/12/12(土) 00:48:12.17 ID:tTwN9OuS.net
>>850
おっとここに十分な解答があったわw

879 :デフォルトの名無しさん:2020/12/12(土) 01:06:54.59 ID:4UtPcEnB.net
>>877
Perlでバッファオーバーランを実装する方法を教えてください。w

880 :デフォルトの名無しさん:2020/12/12(土) 02:31:23.48 ID:gfhxsiY6.net
バッファオーバーランつまり out of range なんてすぐ起こせるでしょ。

881 :デフォルトの名無しさん:2020/12/12(土) 03:38:37.71 ID:4UtPcEnB.net
>>880
具体的に詳しく!
Perlでな?

882 :862:2020/12/12(土) 09:07:56.06 ID:K38oRjDr.net
pack に誰も食いついてこないのはちょっと寂しいな。
正しくやれば C でさえ 1 回の memcmp で比較が済むのだが。
ましてや、Perl の pack/unpack は Perl4 の時代からある超便利関数なのだが。
まあ、「ひょっとして比較をシンプルにしたいのかな?」と思ったから書いただけだし
今回のニーズには合ってても万能というわけではないし
自分が良いと思う方法でやればいいと思うよ。

883 :デフォルトの名無しさん:2020/12/12(土) 09:26:02.24 ID:kEr/Zqiv.net
数1つあたりのbit数が決められないがな
何とかしてmap使いたいから無理筋言ってるだけとしか

884 :532:2020/12/12(土) 10:42:34.69 ID:+ekv//0b.net
>>834 >>875に書いた左の数字と右の数値両方で順位に一貫性のあるキーを作って一回で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";

885 :532:2020/12/12(土) 10:47:43.50 ID:+ekv//0b.net
こうやって幾つかコード書いてみて…>>850かTie::IxHashで十分な気がしたわw

886 :デフォルトの名無しさん:2020/12/12(土) 13:20:14.94 ID:4UtPcEnB.net
>>882
慣れたヤツには最適解過ぎ、慣れてないヤツには意義がわからん、ということで、そんなに食いつきようがないやろ。w

887 :デフォルトの名無しさん:2020/12/16(水) 23:33:00.22 ID:qMOR0fCG.net
>>834
もしそれが桁数固定で、例えばその例のように一桁の数、ハイフン、一桁の数という文字列ならば、何も考えずにそのまま文字列として比較して sort すればいい。つまりただ sort するだけ。

888 :デフォルトの名無しさん:2020/12/17(木) 05:05:50.95 ID:fz9fvgi4.net
そんなもんは9で終わる訳がなくて10も100もある筈、と自然に拡張して考える
それと同様に、枝番号ならサブサブセクション以降もある筈、という拡張は
自然なのに、そっちには思い至らないんだよな

889 :デフォルトの名無しさん:2020/12/17(木) 09:44:28.00 ID:RUflbAwb.net
>>888
外野が考えることじゃない。
>>887は、簡単なケースの例を言ってるだけだから、それでええやろ。

890 :デフォルトの名無しさん:2020/12/18(金) 08:38:15.55 ID:1Xc4Ax1A.net
「数値でソートしたい」って最初から書いてあるだろ……

891 :デフォルトの名無しさん:2020/12/18(金) 08:53:35.39 ID:lJHaaS7Y.net
今だけはいいけどすぐに駄目になりそうな設計を、
裏技見つけたみたいにやりたがる奴がいるんだよな
ユーザは予想を超えた無茶をしてくるものなのに

892 :デフォルトの名無しさん:2020/12/18(金) 09:55:06.92 ID:Kz3E+lfW.net
Keep It Simple, Stupid

893 :デフォルトの名無しさん:2020/12/18(金) 09:58:16.29 ID:lJHaaS7Y.net
よい設計というのは自然とシンプルになるものなんだよ

894 :849:2020/12/18(金) 16:30:11.78 ID:1Xc4Ax1A.net
sub Schwalts {
@tmp = @_;
@tmp = map { [$_, /(\d+)/g ] } @tmp;
@tmp = sort { $a->[1] <=> $b->[1] || $a->[2] <=> $b->[2] } @tmp;
( map { $_->[0] } @tmp);
}

を短く書いたのがシュワルツ変換だよ
くらいの説明はした方がいいのかな。

895 :デフォルトの名無しさん:2020/12/18(金) 21:33:33.71 ID:rUPjISbN.net
まだやってんのかw

896 :デフォルトの名無しさん:2020/12/22(火) 10:15:20.24 ID:YhckWNJa.net
最近raku触ってるけど面白すぎるわこれ、識別子をパース?して組み合わせるの楽しい
もうこれ半分lispだろ

897 :デフォルトの名無しさん:2020/12/22(火) 12:14:37.88 ID:/kVuwMjM.net
演算子の前後に空白が必須なの、なんかイヤじゃない?
ツメツメで書きたいのに。

Perl6のころだけど、オレが降りた理由のひとつ。

898 :デフォルトの名無しさん:2020/12/22(火) 16:09:49.34 ID:Rxnt3reZ.net
>>896
面白いんだけどね
他の言語では無いような機能のオンパレード
ちょっと先を行き過ぎてる感が強すぎるかなあ

899 :デフォルトの名無しさん:2020/12/22(火) 16:21:28.35 ID:Mi4b/BA1.net
言語なんて、他の言語のいいとこ取りで進化していくからな
常に便利になった部分と実験的な部分がある

900 :デフォルトの名無しさん:2020/12/27(日) 18:10:18.92 ID:pJIjrBUp.net
ローカルで一番最初にperlの呼び出しの部分は#!c:/Perl/bin/perl.exeって書くけど
サーバーに上げるときは毎回#!/user/local/perlというように書き直すのがめんどうだけど
#!/user/local.perlのまんまでもローカルで動かす方法ありますか?

901 :デフォルトの名無しさん:2020/12/27(日) 19:39:12.76 ID:CEWAcbKQ.net
あれ?
/usr/local/perlのままでもいけるんじゃないの?
Windowsはそこのパスを見てなかったような。

902 :デフォルトの名無しさん:2020/12/27(日) 19:46:23.03 ID:/HQdSjMP.net
Apacheは見てる
そんでApacheのあるドライブにuser/localのフォルダ作ってperl.exeをコピーしたら動くよ

903 :デフォルトの名無しさん:2020/12/27(日) 21:30:33.15 ID:CEWAcbKQ.net
そうだっけか?

ちなみに、もしそのファイルに拡張子があるならレジストリで指定する方法もある。
「windows apache レジストリ 拡張子」で検索!

904 :デフォルトの名無しさん:2020/12/28(月) 00:11:42.69 ID:oUNoRxKm.net
perlプログラム中に指定するルートパスについてだけど

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

print "<a href=\"/test.html\">リンク</a>";
でリンクをクリックするとちゃんとドキュメントルート直下のtest.htmlに飛べる
これはどうしてか?
test.htmlの中身は空ではない

905 :デフォルトの名無しさん:2020/12/28(月) 00:28:09.86 ID:AD+30T3D.net
>>904
ファイルシステムのルートとドキュメントルートはまったく異なる。
ファイルシステムはプログラム自身が処理するが、URLはまずブラウザが解釈する。

まず落ち着いてよく考えろ。

906 :デフォルトの名無しさん:2020/12/28(月) 08:24:52.02 ID:oUNoRxKm.net
>>905
つまりperlプログラム中で指定する/test.htmlはファイルシステムのルートパスになり
リンクタグで指定する/test.htmlはドキュメントルートのパスになるということですか?

907 :デフォルトの名無しさん:2020/12/28(月) 08:37:46.11 ID:9b76uWwh.net
ドキュンルート

908 :デフォルトの名無しさん:2020/12/28(月) 21:50:36.57 ID:gLlPtDZl.net
>>906
わかってるやん
レスコジキなら他に行ってくれ

909 :デフォルトの名無しさん:2020/12/30(水) 20:09:27.64 ID:ygO1FIcm.net
過疎ってる方が落ち着くという人もいるらしい

910 :デフォルトの名無しさん:2020/12/30(水) 20:26:20.53 ID:ZDzqqnZf.net
初心者が嫌いな「上級者」で過疎っているほうが落ち着くなら、このスレがいいな。

【Perl上級者コーナーPart01】
https://medaka.5ch.net/test/read.cgi/php/1024741312/

911 :デフォルトの名無しさん:2020/12/30(水) 21:55:58.30 ID:Fpo/gio8.net
>>908
わかってるとはいえんよ。
結果のおうむ返しだけみたいだからな。

落ち着いて考えればわかるはずだし、それでしっかり納得したほうがいいことだから、元コメに返事はしないが。

912 :デフォルトの名無しさん:2021/01/03(日) 17:25:22.42 ID:Lv3VCxJc.net
ブラウザのクッキーを許可してるかどうかを調べるにはどうしたらいいんですか?
クッキーを書き込めたら許可されているというやり方だと
書き込んだ直後はクッキー読み取れない
更新ボタンでページを更新しないとクッキー読み取れないので他のやり方で

913 :デフォルトの名無しさん:2021/01/03(日) 17:33:27.51 ID:qCTYrijY.net
お、今年初めの質問だね。
君の悩みは質問箱住人が解決するよ。
ささ、甘酒どぞ。つ甘
みんなーお客さんだよー。

914 :デフォルトの名無しさん:2021/01/03(日) 19:13:07.92 ID:fvS6UGyp.net
>>912
javascript併用したくないならHTTPヘッダで
print "Set-Cookie: hoge\n";
print "Location: hage\\n\n";
みたいな感じでクッキー書いてリダイレクトすればいいんじゃね

915 :デフォルトの名無しさん:2021/01/03(日) 20:53:05.77 ID:Lv3VCxJc.net
>>914
なるほど、でもそれ無限ループにならないっすか?

916 :デフォルトの名無しさん:2021/01/03(日) 21:41:10.96 ID:Y2yZ564Q.net
>>915
サーバーで判定したらええやろ。
そもそもそういう話のはず。

917 :デフォルトの名無しさん:2021/01/03(日) 21:44:24.27 ID:fvS6UGyp.net
>>915
クエリパラメータ追加するなり工夫すれ

918 :デフォルトの名無しさん:2021/01/05(火) 14:55:44.56 ID:zOsm6XDhK
自由な働き方を求め10代〜20代の登録が拡大。フリーランス登録者約3.4倍に増加。
https://prtimes.jp/main/html/rd/p/000000348.000010591.html
フリーランス向け報酬即日払いサービス『先払い』申込件数5,000件突破
https://prtimes.jp/main/html/rd/p/000000048.000047439.html
ITフリーランスの独立支援サービス『テックビズ』&定額制全国住み放題『ADDress』提携開始
https://prtimes.jp/main/html/rd/p/000000035.000047639.html
リース、フリーランスのためのお部屋探しアプリ「smeta」の正式版をリリース、提携賃貸管理戸数が6万戸を突破
https://prtimes.jp/main/html/rd/p/000000032.000042693.html
家族50万円・単身30万円を支給、新潟県が「テレワーク・フリーランス移住」で応援金
https://www.bcnretail.com/market/detail/20201225_205952.html
ワーケーション会社員増加中、定額制宿泊サービス「HafH」を実体験
https://finance.yahoo.co.jp/news/detail/20201231-00257105-diamond-column
「フリーランススタート」の掲載案件数、累計16万件を突破
https://codezine.jp/article/detail/13393
フリーランスエンジニア専門の案件一括検索サイト「フリーランススタート」、
掲載案件数1ヶ月で10,000件増加し、累計掲載案件数16万件突破!さらにリモートワークの掲載案件数5,000件突破!
https://prtimes.jp/main/html/rd/p/000000012.000038976.html
フリーランス向けの求人は「テレワーク可能」が主流に 2021年は労働者の地方への移住が進む?
https://nlab.itmedia.co.jp/nl/articles/2012/25/news118.html

919 :532:2021/01/25(月) 02:03:08.62 ID:NGykvctj.net
ttps://perlcodesample.hateblo.jp/entry/2020/07/10/082720

920 :デフォルトの名無しさん:2021/02/13(土) 20:39:32.56 ID:puXqs/bZ.net
U+10000からU+1FFFFまでの文字があったら置換したい時はどう書けばいい?

921 :デフォルトの名無しさん:2021/02/13(土) 20:57:13.59 ID:aGYlIUX0.net
>>920
s/U¥+(1¥x{4})/pack(q{U},$1)/eg
とかか?

https://perldoc.jp/docs/perl/5.10.0/perluniintro.pod

922 :デフォルトの名無しさん:2021/02/13(土) 21:54:38.37 ID:puXqs/bZ.net
あー
U+10000という文字列を置換したいのではなく、それが示すサロゲートペアを置換したい

923 :デフォルトの名無しさん:2021/02/14(日) 01:36:58.65 ID:u5RUQBwf.net
>>922
s/([¥x{10000}-¥x{1ffff}])/unpack(q{U},$1)/eg
かな?
ダメな気もするが。

つーか、さっきのURLにいろいろ書いてあるから、一度目を通して自分で試してみろ。
んで、うまくいったら、結果を貼るようにな。

924 :デフォルトの名無しさん:2021/02/14(日) 07:32:21.90 ID:kRUK3Bbl.net
$line =~ s/\x{1f306}/置/g;
これは成功する
$line =~ s/\x{1....}/置/g;
こんなことをやろうとしてた
$line =~ s/[\x{10000}-\x{1ffff}]/置/g;
これが正解だった

925 :デフォルトの名無しさん:2021/02/14(日) 10:00:12.81 ID:yrV2Bu9C.net
Perlの場合、マルチバイト文字で正規表現を正しく使うには、あらかじめEncode::decode()でデコードしておく必要があるので厄介。

926 :デフォルトの名無しさん:2021/02/14(日) 11:18:28.10 ID:u5RUQBwf.net
>>925
Perlに限らんやろ。
エンコーディングをまったく気にせず対応している処理系なんか存在しない。

927 :デフォルトの名無しさん:2021/02/21(日) 00:09:40.99 ID:qVt1lmynt
仕事が生きがい?会社員の分際で?そろそろ認めなさい…あなたたちは単なる駒です
⇒赤羽の父ひろゆきが教える仕事の本質とやりたいことの違いが凄過ぎて感動が止まらない…
https://www.youtube.com/watch?v=zkwQOdq17dI
【ひろゆき/切り抜き】サラリーマンって資本主義の奴隷なの?
https://www.youtube.com/watch?v=Vi-dvyd5ksE&t=74s
【ひろゆき】社会人語っちゃうサラリーマンについて語りました
https://www.youtube.com/watch?v=pX7NHj_rIBg
【ひろゆき/切り抜き】虚言癖ってどうやって直せばいい?
https://www.youtube.com/watch?v=5cS7vyb0tfE
【ひろゆき】サラリーマンが知らない世の中の仕組み教えます…
⇒意外と知られていない就職せずにお金を稼ぐ人々たちの存在とは
https://www.youtube.com/watch?v=y7WxL0LxmIY
奴隷は身近にある?日本の奴隷について【ひろゆき 切り抜き】
https://www.youtube.com/watch?v=evQjCUWIHV4
【ひろゆき】会社員なんて楽しくない?⇒楽しいしラクな仕事の仕方とは※サラリーマン必見!
https://www.youtube.com/watch?v=T95-FS8sT3w&t=390s
【ひろゆき】日本のサラリーマン制度...終わってますよwww
https://www.youtube.com/watch?v=Y-30zk2zDn0

928 :デフォルトの名無しさん:2021/03/03(水) 18:48:52.48 ID:Q9ky3RP3.net
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;

929 :デフォルトの名無しさん:2021/03/03(水) 20:20:14.74 ID:DgitZS9x.net
正規表現を使うところではない気がするな。w
ちょっとおちついて、行単位で処理していけよ。

930 :デフォルトの名無しさん:2021/03/03(水) 23:36:11.18 ID:Q9ky3RP3.net
>>929
そういうもんなんですか?
pythonだとre.finditerでイタレータ毎に取れるので似たような感じにperlでもどうにか出来るんだろうと思ったのですが無理そうなら諦めます

931 :デフォルトの名無しさん:2021/03/04(木) 00:03:04.76 ID:ls8aTj6l.net
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"}]

932 :デフォルトの名無しさん:2021/03/04(木) 00:11:02.54 ID:Pkas/NOZ.net
>>930
可不可の話なら、while (m/start..end/g) {...}みたいにしたらきっとできる。

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

正規表現の使いどころとしては非効率的だし、エラー対応が非現実的だし。
また、対象はファイルの内容だそうだが、ReDoSは知ってるか?

933 :デフォルトの名無しさん:2021/03/04(木) 00:24:13.90 ID:u/riWi2o.net
なんで急にRubyが出てくるんだよ(呆れ

934 :デフォルトの名無しさん:2021/03/04(木) 00:42:19.66 ID:2AXWpxTy.net
perlリスペクト公言言語だから敬意を評してるんじゃないかな、大目に見てあげよう

935 :デフォルトの名無しさん:2021/03/04(木) 09:09:52.94 ID:8OZ033Zi.net
元がファイルだからなあ
1行ずつ分かれてるものを合体させてまた分離する、というのが無意味に見える

正規表現は柔軟性なので、使わなくていいくらいかっちりしてるものには
使わない方が安全側に倒れる
元ファイルが手書きで、無駄な改行やコメントが入ってるなら正規表現

936 :デフォルトの名無しさん:2021/03/07(日) 10:07:03.25 ID:Anqe+9Rf.net
forkがハングする。

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

Strawberry perl 64bit 5.32.1
Windows10Pro 64bit version 2004
Corei3-4370, Memory 12G

937 :デフォルトの名無しさん:2021/03/07(日) 10:45:56.10 ID:Q92Mc+WL.net
安定して動かないならバグっている

だいたい動くけど、ごく稀に動作がおかしい、ということがforkはある
forkがコケても動くような仕組みにすればok

938 :デフォルトの名無しさん:2021/03/07(日) 10:50:58.30 ID:x9JK9zFw.net
そもそもWindows APIはfork()をサポートしてない。

939 :デフォルトの名無しさん:2021/03/07(日) 11:48:43.53 ID:Anqe+9Rf.net
>>937 ありがとう。
メモリ使用量が低いと成功。
firefoxでもタブ1枚ぐらいなら成功。
firefoxでタブ(yahoo.com)10枚開くと、確実にハング。

ラクダ本にも、失敗(戻り値undef)の対処法が書いてありますね。
WindowsOSがらみなので、イロイロありそうなのは察します。
でも、forkを呼び出したらハングして帰ってこないからなぁ。
コケるというよりは、forkを呼び出さない:
  if( $can_fork ) {fork;}
ってな書き方が必要になってしまう。

940 :デフォルトの名無しさん:2021/03/07(日) 11:53:44.14 ID:Anqe+9Rf.net
追記:
perlスクリプトとfirefoxは関係ありません。
単に、デスクトップで調べものしながら、コマンドプロンプトでperlインタプリタ
を起動して作業しているだけです。連投失礼しました。

941 :デフォルトの名無しさん:2021/03/07(日) 12:10:59.62 ID:3xq9+JKJ.net
ActivePerl の Windows 版では fork() がエミュレーションされているらしい。

実際に呼び出してみるとスレッドがひとつ増える。
中ではおおかた CreateThread() でもしてるんだろう。

942 :デフォルトの名無しさん:2021/03/07(日) 12:24:40.47 ID:xy+MS7Fg.net
windowsで安定動作させたいならforkを使わずに自分で別スレッドか別プロセス立てるのが吉

943 :デフォルトの名無しさん:2021/03/07(日) 14:22:59.45 ID:Anqe+9Rf.net
>>941
perldocによると、ActiveStateとMSが頑張ったらしいよ。
エミュあつかいとのことです。

>>942 ありがとう。
スレッドでするわ・・・さすがにハングはだめだわ(^^;

944 :デフォルトの名無しさん:2021/03/07(日) 14:48:48.37 ID:Q92Mc+WL.net
forkとか再帰呼び出しとか、魔術的で楽しいけど、大抵罠にはまる

945 :デフォルトの名無しさん:2021/03/07(日) 17:38:53.17 ID:quYd9iFF.net
再帰はええやろ。
forkはもともとUNIX用で、Windowsとは相性が激悪なだけやから、しゃあない。

946 :デフォルトの名無しさん:2021/03/07(日) 17:49:12.06 ID:Q92Mc+WL.net
階層ディレクトリを辿る、みたいなとこに再帰を使うと止まらなくなったりする
絶対止まると保証されてるとこにしか使えなくて、そういうのは別に再帰でなくてもやれる

隅々までどうなってるか判らないものに再帰は威力を発揮するけど、
そういうのは往々にして停止性が保証されない

947 :デフォルトの名無しさん:2021/03/07(日) 18:11:41.00 ID:eIiM+J9a.net
それはあんたが無能だから

948 :デフォルトの名無しさん:2021/03/07(日) 18:18:17.98 ID:x9JK9zFw.net
Perlと関係ない話はよそでどうぞ

949 :デフォルトの名無しさん:2021/03/07(日) 23:39:46.89 ID:quYd9iFF.net
>>946
再帰終了をちゃんとできないヤツは、ループ終了もできないやろ。w

ディレクトリうんぬんに限って言えば、ファイルシステムへの知識が足りないとかか。
リンク系の。

950 :デフォルトの名無しさん:2021/03/07(日) 23:53:02.15 ID:Q92Mc+WL.net
軽く考えてるけど、プログラムの停止性ってもっそい奥が深い
ゲーデルの不完全性定理と密接に絡んでる

951 :デフォルトの名無しさん:2021/03/08(月) 00:03:00.68 ID:RDgJTpCR.net
tarのhオプションってよくできているよな
無限ループに陥りやすいが

952 :デフォルトの名無しさん:2021/03/08(月) 00:23:56.56 ID:tQicr2bh.net
再帰処理は考えてるの楽しいよな
実装するかとなると状況次第

953 :デフォルトの名無しさん:2021/03/08(月) 01:47:35.66 ID:6lKYXbK2.net
>>950
バグが存在しない証明は超難しいから、ふつうやらない。
かわりに、テストを必要なだけする。
それだけのこと。

原理とやらは学者に任せておけばいい。

954 :デフォルトの名無しさん:2021/03/08(月) 10:04:20.07 ID:XzCJxGl3.net
ggl先生に "perl dir tree" で検索かけたら自作ページが多いね。
安心安全鉄板ライブラリとかってあるかな?
素人考えでなんだけど・・・OS別、FS別なんてあるんかの。

955 :デフォルトの名無しさん:2021/03/08(月) 10:17:22.69 ID:SORPad+v.net
親にリンクしていてループするのが困るので、
全部の子に対してカウンタを持たせる、くらいしか回避方法が無いんだよな
それだと再帰でやってるうまみが無くなってしまう

956 :デフォルトの名無しさん:2021/03/08(月) 12:03:45.46 ID:JySUELLY.net
素直にFile::Find使っとけ

957 :デフォルトの名無しさん:2021/03/08(月) 12:34:19.76 ID:SORPad+v.net
dir /s の結果を使うのが一番楽

958 :デフォルトの名無しさん:2021/03/08(月) 16:27:27.25 ID:3P7OMB5d.net
File::Findは処理速度が遅いのが難

959 :デフォルトの名無しさん:2021/03/08(月) 17:21:12.95 ID:6lKYXbK2.net
>>955
リンクを不用意にたどるな。
既存コマンドでもオプションにしがちだし、ディレクトリ構成によっては死ぬくらいだから、しゃあない。

960 :デフォルトの名無しさん:2021/03/08(月) 17:24:47.95 ID:6lKYXbK2.net
>>958
何と比べて?
no_chdirを指定したりしたらマシになったりしない?

961 :デフォルトの名無しさん:2021/03/08(月) 17:40:53.14 ID:SORPad+v.net
ディレクトリならどこかにある実体のコピーだろうから、リンクなんか無しで済むけど、
より一般化したリスト構造だったら辿らない訳にいかない
だから、事前にループしていないことを確認してから処理することになって、
そのテストがループにはまる

962 :デフォルトの名無しさん:2021/03/08(月) 20:06:16.14 ID:3P7OMB5d.net
>>960
試してみたが、no_chdirは関係ない。
File::Findは、dir /S /B コマンドのパイプ読み取りに比べて、3倍も時間がかかる。
File::Findは遅いだけでなくコールバックでユーザー変数を扱えない欠点があるから、私はFile::Findを使わない。

963 :デフォルトの名無しさん:2021/03/08(月) 21:30:38.88 ID:3P7OMB5d.net
File::FindはUnix系OSで使う場合は find コマンドのパイプ読み取りと同等か少し速い。
File::Findが明確に遅いのはWindows向けにビルドされたPerlの場合のみ。

964 :デフォルトの名無しさん:2021/03/08(月) 22:05:40.64 ID:6lKYXbK2.net
>>963
WindowsのどのPerl?
ひょっとしてCygwin版?
ActivePerlやMSYS2版ならマシだったり?

965 :デフォルトの名無しさん:2021/03/08(月) 22:39:10.09 ID:3P7OMB5d.net
>>964
残念ながらネイティブに最適化されているはずのActivePerl や Strawberry Perl でFile::Findが遅い。
原因は知らないけどWin32APIの使い方が良くないからだと思う。

966 :532:2021/03/09(火) 00:11:34.07 ID:jxvXMO9/.net
$^WIN32_SLOPPY_STAT じゃね?

File::FindはWindowsだと、SJISで全角「構」などの2バイト目が\(0x5c)のフォルダに遭遇すると
無限loopしたり誤動作するから、結局Wndowsでフォルダ階層を再帰的にたどるには
utf8化したperl sourceで自分でopendir, readdirして、encode, decodeせにゃならん。

967 :532:2021/03/09(火) 00:15:08.81 ID:jxvXMO9/.net
別件だがWindowsではSJISで全角「構」などの2バイト目が\(0x5c)のフォルダには
perlからlstatやutimeが出来ないみたいで難儀した。
Linuxのutf8のファイルシステムと違ってWindowsのSJISファイルシステムは面倒

968 :デフォルトの名無しさん:2021/03/09(火) 01:17:12.50 ID:B0uPByTP.net
>>965
そうやったか。。。

>>967
NTFSファイルシステム自体はUTF-16やぞ?
MicrosoftがようやくいよいよコマンドプロンプトとかNotepadとかのUnicode対応を考えはじめてるし、いずれWindows版も対応するんちゃうか。
いっそツッコんだら?

969 :928:2021/03/09(火) 05:19:08.22 ID:NUN2sKP0.net
>>928
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

970 :デフォルトの名無しさん:2021/03/09(火) 08:00:45.91 ID:4CK4kuWA.net
コマンドプロントはとっくにUTF-16対応している。出力フォントが表示に対応していないだけ。
コマンドプロントにはもう機能追加されないから Windows Terminalに乗り換えたほうがいい。

971 :デフォルトの名無しさん:2021/03/09(火) 08:27:17.16 ID:4CK4kuWA.net
コマンドプロントは今でもすでに非システムコード文字(アラビア文字やハングルなど)をコマンドに引数渡しできる。
受け取る側のアプリがUTF-16形式で起動時の引数を取らなかったり、batファイルが非システムコード文字に対応していないだけ。
コマンドプロントの努力だけではどうしようもない。

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

一方、Windows向けビルドされたPythonは非システムコード文字を引数で受け取ることができる。
Pythonのプラグインを作ったことある人なら分かると思うが、Pythonはインターフェース間の文字列のやりとりにUTF-16を使っている。

972 :デフォルトの名無しさん:2021/03/09(火) 08:33:53.42 ID:HJK4uNxM.net
UTF-16も嬉しくない

973 :532:2021/03/09(火) 08:45:38.83 ID:UTQZC5u1.net
NTFSってUTF-16だったのか、
しかしperlのreaddirはcp932で返してきているような気がs…

974 :デフォルトの名無しさん:2021/03/09(火) 09:28:02.71 ID:HJK4uNxM.net
NTFSはUCS-2で、windowsがUTF-16
それをわざわざcp932に変換して寄越す

975 :デフォルトの名無しさん:2021/03/09(火) 10:42:13.66 ID:4CK4kuWA.net
NTFSもUTF-16だと思うよ。

976 :デフォルトの名無しさん:2021/03/09(火) 10:44:51.95 ID:SbXzcieK.net
>>971
> コマンドプロントの努力だけではどうしようもない。

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

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

制約つーか、むしろ互換維持とかただ昔のままほったらかしとかやろ。w

977 :デフォルトの名無しさん:2021/03/09(火) 10:56:11.55 ID:SbXzcieK.net
>>974
そのおかげで、20年以上昔からふつうにWindowsで使えてきたわけだからしゃあない。
むしろありがたかった話。

978 :デフォルトの名無しさん:2021/03/09(火) 12:55:12.46 ID:NUN2sKP0.net
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 は欲しい

979 :デフォルトの名無しさん:2021/03/09(火) 20:18:30.71 ID:BijZjsz/.net
正規表現のパターンの中に変数を書くとおかしくなりますが、どうしたらいいでしょうか。

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

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

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

どう書いたらいいでしょうか?

980 :デフォルトの名無しさん:2021/03/09(火) 20:28:25.57 ID:HJK4uNxM.net
なんで ] だけエスケープしてるの?

981 :デフォルトの名無しさん:2021/03/09(火) 20:34:49.51 ID:nUvu3sQ4.net
そういうときの為のqrですよ

982 :デフォルトの名無しさん:2021/03/09(火) 20:36:21.19 ID:XI91xcQL.net
[]内は文字セットだからその$は行末マッチじゃないし

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

お騒がせしました。

984 :デフォルトの名無しさん:2021/03/09(火) 22:43:46.86 ID:HJK4uNxM.net
{0,1}って?と等価だよね

985 :デフォルトの名無しさん:2021/03/09(火) 23:03:58.63 ID:B0uPByTP.net
>>983
hoge,xxxx
にはマッチしないが、ええんか?
>>979の目的と違うで。

986 :デフォルトの名無しさん:2021/03/10(水) 02:28:31.13 ID:ixLG+AYE.net
hoge(,|$)

やりたいのはコレじゃない?

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

あと、Perl には \z もあるよ。

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

まだ試してませんが、教えていただいたやり方でチャレンジしてみます。

989 :532:2021/03/11(木) 11:39:56.33 ID:AlcqB+X5.net
$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

990 :デフォルトの名無しさん:2021/03/11(木) 14:27:02.78 ID:IdZJgmDv.net
もしかして
¥bhoge¥b
がよかったんじゃないの?

991 :デフォルトの名無しさん:2021/03/11(木) 14:37:57.64 ID:l5V9NIZG.net
splitをうまく使うと解決したかも

992 :デフォルトの名無しさん:2021/03/20(土) 13:47:35.09 ID:UD6ZNZG9.net


993 :デフォルトの名無しさん:2021/03/20(土) 13:51:21.40 ID:UD6ZNZG9.net
Python勉強中

print('梅')
exit()

994 :デフォルトの名無しさん:2021/03/20(土) 17:31:10.22 ID:ql2G31oz.net
【モダン推奨】Perlについての質問箱 50箱目
https://mevius.5ch.net/test/read.cgi/tech/1327110999/

995 :デフォルトの名無しさん:2021/03/21(日) 17:34:20.99 ID:2t2VtxHB.net


996 :デフォルトの名無しさん:2021/03/21(日) 17:36:32.63 ID:dkvLNxnd.net


997 :デフォルトの名無しさん:2021/03/21(日) 17:39:12.82 ID:2t2VtxHB.net
うぜ

998 :デフォルトの名無しさん:2021/03/21(日) 21:54:16.28 ID:6DoINzzO.net
2年で消化 人気スレじゃねーか

999 :デフォルトの名無しさん:2021/03/22(月) 01:23:08.94 ID:rCEIiEgY.net
うめ

1000 :デフォルトの名無しさん:2021/03/22(月) 23:39:18.97 ID:rCEIiEgY.net


1001 :デフォルトの名無しさん:2021/03/22(月) 23:39:30.86 ID:rCEIiEgY.net


1002 :デフォルトの名無しさん:2021/03/22(月) 23:40:13.68 ID:rCEIiEgY.net
質問いいですか?

1003 :デフォルトの名無しさん:2021/03/22(月) 23:41:34.32 ID:rCEIiEgY.net
おしまい

1004 :2ch.net投稿限界:Over 1000 Thread
2ch.netからのレス数が1000に到達しました。

総レス数 1004
263 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★