X



Perlについての質問箱 63箱目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2014/02/19(水) 23:36:23.29
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板: http://kohada.2ch.net/php/

このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
荒らしはスルー推奨。

"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、
Perlの奥深さについて皆で語り合い、追求してまいりましょう。

www.perl.org/get.html
Download Latest Stable Source (5.18.2)

▼前スレ
Perlについての質問箱 61箱目
http://toro.2ch.net/test/read.cgi/tech/1381561905/
Perlについての質問箱 62箱目
http://toro.2ch.net/test/read.cgi/tech/1385039352/
0625デフォルトの名無しさん
垢版 |
2017/02/09(木) 22:13:19.02ID:CNUBJX7I
>>624
それだけだったらLinuxやFreeBSDなどを使うって方法もあるだろ?

だからM$に金を払うのがいやだけど、MSのOSが好きという理由であるはずだ
もしくはMS以外のOSがクソだっていう可能性もあるけど
0626デフォルトの名無しさん
垢版 |
2017/02/09(木) 22:22:13.62ID:4ZcYgl3B
>>618
perlはもう進化が止まってるので、あんまり新しいことは出来ない
自分で作るなら別だけど

rubyやpythonなら整ってる筈
0628デフォルトの名無しさん
垢版 |
2017/02/10(金) 07:05:20.49ID:SVdyXXtN
>>618
もう見てないだろうけど
HTML::TreeBuilder
HTTP::Daemon
LWP::UserAgent
WWW::Scripter
くらいでなんとかなると思うよ。簡単かどうかは知らんけど大体なんとかなってる。
0629デフォルトの名無しさん
垢版 |
2017/02/10(金) 10:48:54.81ID:tdAYPVUl
最近はperlは余り聞かないな
中学生の時にはブームだったけど……。(何十年も前)

学校ではpython とかだと思う。C# java が主力?

とにかく、滅多に聞かないな
0631デフォルトの名無しさん
垢版 |
2017/02/10(金) 22:06:13.34ID:+KYQgfiL
Perlは全然進化しないからな
一年ちょっと前に6がでて音沙汰なし
7はいつ出るんだ?って状態
0635デフォルトの名無しさん
垢版 |
2017/02/11(土) 14:50:19.58ID:N4/UY6wx
>>631
6出てたのか?
知らなかったわ
0636デフォルトの名無しさん
垢版 |
2017/02/11(土) 15:18:36.75ID:p/3UeWk3
>>634
> 実用性を重視するならJava一択
それって言語の実用性じゃなくて
人材的な意味での実用性だよな

つまりJavaは色んな所で使われてる言語だから
Javaできますって言っておけば採用されやすい。
自分が実用性がある人間になりたいならJava一択
0639デフォルトの名無しさん
垢版 |
2017/02/11(土) 17:33:33.41ID:tLczzgrK
何がなんだか仕様に混乱するから3つまでしか習得出来ません
4つめ覚えるとなにかを忘れます
0640デフォルトの名無しさん
垢版 |
2017/02/11(土) 21:11:41.56ID:y7nchZP8
621
> むしろなぜXPを使ってるのか知りたい

動作確認だよ
XPと10で動くならVistaでも7でも8でもでも動く可能性が高いから
いちいち全OSを揃えて動作確認すると
シロウトの趣味でアプリケーション開発するには荷が重すぎる
0641デフォルトの名無しさん
垢版 |
2017/02/11(土) 22:46:04.81ID:p/3UeWk3
いちいち全OSで動作させたいと思う理由は何?

サポートが終了しているXPで動作する必要はないし
Vistaも2017年4月までだ。シェアから考えれば切り捨てても十分だし

7と10で動作確認すればいいじゃん
0645デフォルトの名無しさん
垢版 |
2017/02/13(月) 18:59:46.87ID:VKyPIbro
用途を特定した専用マシンみたいなのは、特にOSを入れ替えずにずっと使うな
測定機器や実験機器の一部とか、何かの制御用とか

ただ、そんなマシンは新しいソフトを入れたりもしないから、
互換性とかどうでもいい世界だけど
0646デフォルトの名無しさん
垢版 |
2017/02/17(金) 23:51:32.63ID:QUNiBjhs
以前こちらでお世話になった顔文字のど素人です。

$ perl -p -e 's/(..)/$1 /g;'
123456

12 34 56

恐縮ですが上記の逆(スペースの削除)をご指導願います。
00 06 fc 25 58 50 0a 00 54 92 31 03 49 46 88 d0 c6
    ↓
0006fc2558500a0054923103494688d0c6

よろしくお願いいたします _(_^_)_
0647デフォルトの名無しさん
垢版 |
2017/02/18(土) 00:14:42.65ID:eUOj9Lyv
>>646
s/\s//g
0651646
垢版 |
2017/02/18(土) 08:59:07.57ID:64GKa0+N
>>647
ど素人に有難うございました。
0653デフォルトの名無しさん
垢版 |
2017/02/26(日) 10:31:20.73ID:cj/RoW+L
active perlで、長いファイル名のあるフォルダに対して readdir すると、
エラーになって止まるんだけど、どうやって回避すればいいんだ

エラーが返るとかじゃなくて実行自体が止まるので、とりあえず読んでみて、
とかが出来ない
0654デフォルトの名無しさん
垢版 |
2017/02/26(日) 10:39:23.76ID:OmTNhTRr
windowsのエラーじゃねぇの?
とりあえずevalすれば実行は止まらないと思うけど
0662デフォルトの名無しさん
垢版 |
2017/03/01(水) 08:44:35.66ID:RfMjQxG+
Windowsで260文字以上のファイル名を普通に作ろうとすると、
「ファイル名が長すぎる」とエラーが出るが、
ネットワークドライブを使うと、作れてしまうようだ。
ただ、それを実際に使おうとすると、ドツボに嵌るみたいだな。
0666デフォルトの名無しさん
垢版 |
2017/03/08(水) 23:48:39.27ID:0EPJtM8y
シェルとカーネルを縦横無尽に使いこなすのがPerlプログラミングの醍醐味。
0667デフォルトの名無しさん
垢版 |
2017/03/09(木) 15:21:10.67ID:lYcZyteE
print 1+(2+3);
print (1+2)+3;

この二つの文の違いを使いこなすのが、Perlプログラミングの醍醐味。
0668デフォルトの名無しさん
垢版 |
2017/03/14(火) 00:58:03.78ID:mRCDOzFa
awk 由来の 0+ ハックや "". ハックは常識として使いこなすのが、Perlプログラミングのたしなみ。
0671デフォルトの名無しさん
垢版 |
2017/03/16(木) 06:54:07.57ID:t2soddN5
>awk 由来の 0+ ハックや "". ハックは
そもそも、常識でないといいたげな、このレスは何?
まともな参考本読めば、最初の方に書いてある。
ハックでもなんでもない
0672デフォルトの名無しさん
垢版 |
2017/03/20(月) 17:47:23.90ID:5loIUxX7
Win-7、Active Perl 5.16です。Unicode文字を含むperlの処理結果を
utf16leで出力しようとしています。下のようにやってみましたが、ダメでした。
出力をバイナリエディタでみると、改行コードが変な風にいじられていました。

binmode STDOUT => ":encoding(utf16le)";
print "ユニコード文字を含むテキスト\n";

色々試した結果、下のスクリプトのようにすると、概ね動くことが解り
ましたが、動かない場合もあります。下の例では、「aaaaa」は出力され
ますが、「bbbbb」は出力されません。どうするのが正しいでしょうか?

use utf8;
binmode STDOUT;
use Encode qw/ encode decode /;

sub wprint{
 foreach(@_){
  s/\n/\r\n/g;
  print encode('utf-16-le', $_);
 }
}
wprint "a"x5, "\n";
foreach (1..5){
 wprint "b";
}
wprint "\n";
0673デフォルトの名無しさん
垢版 |
2017/03/20(月) 19:53:29.20ID:SJAmj6b4
>改行コードが変な風にいじられていました
perlではどのOSでも改行をLF(\n, 0x0a)として扱っている
Windowsでは通常出力する際に自動的にLFをCRLFに変換している

0x0a (perlの\n)
0x0a 0x00 (utf16にエンコード)
0x0d 0x0a 0x00 (0x0a を 0x0d 0x0a に変換、正しくは 0x0d 0x00 0x0a 0x00 にしたい)

wprint関数のやり方が上手くいくのは
0x0a (perlの\n)
0x0d 0x0a (s/\n/\r\n/g で置換)
0x0d 0x00 0x0a 0x00 (utf16にエンコードし、自動変換も無効にしているのでこのまま出力される)


>「bbbbb」は出力されません
様々な事情で特殊変数 @_ の各要素やループ時に設定される一時変数 $_ は元の値の別名として扱われる
つまり同じ値を参照しているため、それらに代入や置換などを行うと元の値も変更されてしまう
元の値が変数ならそれが変更されるだけで問題はないが、定数の場合変更できないのでそこで死んでしまう

wprint関数では @_ でもループ内でも変数として受け取っていないため置換処理で引数の値を変更しようとしている
'a' x 5 は評価されたときに変数に入れられたように扱われるので問題はないが、直後の "\n" はまさしく定数なので変更できず死に、以降の処理が止まる
関数内で最初に my @args = @_; のように一度変数で受け取るのが意図しない変更を防ぐ意味でも良いだろう
0676デフォルトの名無しさん
垢版 |
2017/03/31(金) 21:37:50.01ID:lffYMjCi
print print (1+2)+(4+5)+6+7;

3
23

print print print (1+2)+(4+5)+6+7;

3
23
1 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0677デフォルトの名無しさん
垢版 |
2017/03/31(金) 22:38:54.66ID:PsuuxH/N
$hash{'aaa'}{'bbb'}{'ccc'} = 1;

みたいなことをしても、普通に通るのが凄いよな
それでいて、仕様としては別に多次元ハッシュなんか対応してない
0678デフォルトの名無しさん
垢版 |
2017/04/01(土) 08:51:48.01ID:AF9KLm8F
なにをするんでもいちいちチェックが入って膨大な自動操作が裏で行われてる証拠。
さらに変数と実体を結びつけるデータテーブルもかなりの容量を使用してる。
木構造の探索などをやると、動作がCの10倍程度違うと言われるけど、やってみたらメモリ容量が100倍以上違うことも確認された。(将棋の盤面探索)。

まあ一時的にスクリプトが欲しいときとか、それが良い時はそれで良いけど、
通常のソフトウェアを作る時内部でそんなことが起きれてば完全な欠陥なわけであって。
0679デフォルトの名無しさん
垢版 |
2017/04/01(土) 17:07:22.61ID:y/HEzjsw
そうか、100倍以上違うのか。試してみたいからソースコードを見せてくれ。
0681デフォルトの名無しさん
垢版 |
2017/04/02(日) 11:42:32.36ID:W390vP7B
1 ビット × 8000000 のビットマップって Perl でどうやるんだろう? こうかな?

$perl -e '$h{ $_ } = 1 foreach 0 .. 7999999; system("bash","-c","ps -p \$PPID -F");'
UID    PID PPID C  SZ  RSS PSR STIME TTY     TIME CMD
i     5240 4743 96 253250 997920 1 11:18 pts/4  00:00:05 perl -e $h{
$

みたいなことでもしたんだろうか。
0682デフォルトの名無しさん
垢版 |
2017/04/02(日) 12:21:59.20ID:n1w2M1cg
>>680
インタプリタとコンパイラの速度差は2倍未満と言われてるけどな
この場合は自動型変換などの暗黙の処理とデータテーブルが問題。
もちろん自動型のコンパイラを使用しても同じ結果になる。
0684デフォルトの名無しさん
垢版 |
2017/04/02(日) 14:35:50.91ID:n1w2M1cg
「そう言われてる」ってやつだからな。
ただ有名なんで検索すればいろんなところで出てくる。
10倍遅くなるのは、自動処理が8でインタプリタが2、合計10
0685デフォルトの名無しさん
垢版 |
2017/04/02(日) 14:37:05.43ID:n1w2M1cg
別に正確な情報どうこうじゃなくて、
おそいのがインタプリタのせいだと思ってるよりずっといいでしょって話
0687デフォルトの名無しさん
垢版 |
2017/04/02(日) 16:44:24.11ID:W390vP7B
ろくに知らなければこういうことをするかもな、という想像なんだが。わかりにくかったのならすまん。
なにしろ何をしたのかまったく解らないから適当に想像するしかないんだよ。
0688デフォルトの名無しさん
垢版 |
2017/04/15(土) 03:58:55.24ID:vTxJoJiF
Cでも
伸び縮みを含めた動的なメモリ宣言と開放と、呼び出しの度そのチェックと、管理情報の保存.
動的な値の自動変換と、呼び出しの度そのチェックと、管理情報の保存.

たったこんだけでも超遅くなるか
つか動的な宣言って超遅いよね
0689デフォルトの名無しさん
垢版 |
2017/04/15(土) 04:02:38.36ID:vTxJoJiF
それはそうと俺も稀にPerlやるんだが、

use utf8;
use strict;
use warnings;

binmode STDIN, ':encoding(utf8)';
binmode STDOUT, ':encoding(utf8)';
binmode STDERR, ':encoding(utf8)';

これ毎回書くんだが、全部省略できないかの
すぐこれ書くの忘れて文字コード関係でおかしくなるし、書いたら書いたで無駄に目障りなんだが・・・
0690デフォルトの名無しさん
垢版 |
2017/04/15(土) 10:45:22.06ID:DbxhuG0l
# Hoge.pm
package Hoge;
use strict;
use warnings;
use utf8;

binmode STDIN, ':encoding(utf8)';
binmode STDOUT, ':encoding(utf8)';
binmode STDERR, ':encoding(utf8)';

sub import{
  strict->import;
  warnings->import;
  utf8->import;
}

1;

# script.pl
use Hoge; # ただし@INCからHoge.pmが見つかるようにする
0693デフォルトの名無しさん
垢版 |
2017/04/15(土) 21:19:29.96ID:4y1tBhnC
それが凄いところ
オブジェクト指向だって、ほんの小手先でちゃんと実用になるものを実装しちゃってる
0694デフォルトの名無しさん
垢版 |
2017/04/15(土) 23:53:13.69ID:k4jkkg7x
>>693
最低レベルな。
小手先で済ませちゃったから、それ以上の
便利な機能はライブラリ任せになっちゃって
いつまでも標準が生まれなかった。
Perl6にさっさと移行すればいいのに
0696デフォルトの名無しさん
垢版 |
2017/04/16(日) 00:42:48.16ID:cCOM2/u0
>>695
可読性の問題だ。
意味は全く一緒なのに、書き方を変えてどうする?
言語を変えるのと一緒だぞ
0699デフォルトの名無しさん
垢版 |
2017/04/16(日) 06:42:15.56ID:h3ZKvGOL
それは目的がニッチ過ぎたか利用者が少なすぎたからで、
どっちにしろ標準になんかならない
0703デフォルトの名無しさん
垢版 |
2017/04/20(木) 22:52:03.43ID:NBs+Bll8
>>702
なってないわ
0705デフォルトの名無しさん
垢版 |
2017/04/23(日) 19:39:54.82ID:W+YLVZyj
>>688
そうか?ディスクI/Oが絡まないようなメモリ上だけの操作ならさほど遅い感じしないけど。
まあ、単純なのと比べたら遅いけどね。
0708デフォルトの名無しさん
垢版 |
2017/05/03(水) 00:40:52.14ID:M+hoQd/o
$str = "みかん りんご ぶどう";
を・みかん ・りんご ・ぶどうというように文字の最初に・をつけるには
どう置換すればいいんですか?
0710デフォルトの名無しさん
垢版 |
2017/05/03(水) 01:07:15.97ID:Qv6lwwF1
$str =~ s/(\w+)/・$1/g;
0712デフォルトの名無しさん
垢版 |
2017/05/03(水) 02:22:37.42ID:0sDWrHda
linux mint18
perl6のインストールについて

$ sudo apt install rakudo
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
E: パッケージ rakudo が見つかりません

どうしたらインストールできます?
0713デフォルトの名無しさん
垢版 |
2017/05/03(水) 02:40:51.60ID:0sDWrHda
$ perl6 -v
This is perl6 version 2015.11 built on MoarVM version 2015.11

すいません、解決しました
0715デフォルトの名無しさん
垢版 |
2017/05/11(木) 23:25:04.61ID:nen5x9dT
メモリリーク検出になに使ってる?
とりあえず昔からTest::LeakTrace使ってるんだけど
いまはもっと便利なものがあったりするのかな?
0716デフォルトの名無しさん
垢版 |
2017/05/24(水) 13:05:14.66ID:9utV0RoM
Perl/Qt は癖があるね、Perl/Qtとクラスを同時に使おうとするとなかなか大変。
0717デフォルトの名無しさん
垢版 |
2017/05/28(日) 12:56:56.81ID:+Ey6Jlm8
テキストファイルを読み込むときに
// (例えばfile://...)
があると、そこから行末まで読み込めない現象が起きるんだけど
どうしたらちゃんと読み込める?
binmodeにしても解決しなかった
0720デフォルトの名無しさん
垢版 |
2017/05/28(日) 14:05:21.98ID:9RwfEHwH
ファイルハンドルからダブルスラッシュが含まれる行を読み込もうとするとダブルスラッシュが行末と誤認されるという解釈でいいんですかね
0721デフォルトの名無しさん
垢版 |
2017/05/28(日) 14:33:51.85ID:eFuC5yco
絶対になにかカンチガイしてるだろう。
単に出力のバッファリングで単に表示されてないだけとか。
もしくは自分で"//"以降を削除するような処理をしているとかだな。
正規表現の書き誤りがあやしい。
■ このスレッドは過去ログ倉庫に格納されています

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