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/
探検
Perlについての質問箱 63箱目
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2014/02/19(水) 23:36:23.29652デフォルトの名無しさん
2017/02/18(土) 21:00:13.31ID:3ABB/Pla だから土曜日に書いたと
653デフォルトの名無しさん
2017/02/26(日) 10:31:20.73ID:cj/RoW+L active perlで、長いファイル名のあるフォルダに対して readdir すると、
エラーになって止まるんだけど、どうやって回避すればいいんだ
エラーが返るとかじゃなくて実行自体が止まるので、とりあえず読んでみて、
とかが出来ない
エラーになって止まるんだけど、どうやって回避すればいいんだ
エラーが返るとかじゃなくて実行自体が止まるので、とりあえず読んでみて、
とかが出来ない
654デフォルトの名無しさん
2017/02/26(日) 10:39:23.76ID:OmTNhTRr windowsのエラーじゃねぇの?
とりあえずevalすれば実行は止まらないと思うけど
とりあえずevalすれば実行は止まらないと思うけど
655デフォルトの名無しさん
2017/02/27(月) 08:34:03.50ID:hOw/b7i/ >>653
ひょっとして、ファイル名にユニコード文字が混じったりしてない?
ひょっとして、ファイル名にユニコード文字が混じったりしてない?
656デフォルトの名無しさん
2017/02/27(月) 08:44:24.40ID:hOw/b7i/ readdirのユニコード版なら、こうゆうモジュールもある。
http://search.cpan.org/~xaicron/Win32-Unicode-0.26/lib/Win32/Unicode/Dir.pm
http://search.cpan.org/~xaicron/Win32-Unicode-0.26/lib/Win32/Unicode/Dir.pm
657デフォルトの名無しさん
2017/02/27(月) 18:47:01.31ID:dx1g9tP+ unicodeは入ってない
単に長いだけ
単に長いだけ
658デフォルトの名無しさん
2017/02/27(月) 22:36:40.65ID:8LXDZxYt Win32::LongPathは?
659デフォルトの名無しさん
2017/02/27(月) 22:51:51.90ID:dx1g9tP+ それを使うと、既存のreaddir の挙動が変わるの?
660デフォルトの名無しさん
2017/02/28(火) 08:31:44.98ID:ECHoSeWI >>659
「長い」って何文字なん?260文字以下だと問題ないはず。
「長い」って何文字なん?260文字以下だと問題ないはず。
661デフォルトの名無しさん
2017/02/28(火) 18:54:26.71ID:Gbg+HMKR それ以上あったので問題があった
662デフォルトの名無しさん
2017/03/01(水) 08:44:35.66ID:RfMjQxG+ Windowsで260文字以上のファイル名を普通に作ろうとすると、
「ファイル名が長すぎる」とエラーが出るが、
ネットワークドライブを使うと、作れてしまうようだ。
ただ、それを実際に使おうとすると、ドツボに嵌るみたいだな。
「ファイル名が長すぎる」とエラーが出るが、
ネットワークドライブを使うと、作れてしまうようだ。
ただ、それを実際に使おうとすると、ドツボに嵌るみたいだな。
663デフォルトの名無しさん
2017/03/01(水) 21:51:27.16ID:KTTjixcr ファイル名っていうか、パスを含めた長さな
664デフォルトの名無しさん
2017/03/05(日) 00:13:47.26ID:hhHVIZUN @file = split(/\n/,`dir /s /b *.* 2>NUL`);
な。次スレのテンプレに追加するから。
な。次スレのテンプレに追加するから。
665デフォルトの名無しさん
2017/03/05(日) 15:57:50.73ID:des1Iukd forkするのOKなら何でもありじゃん
666デフォルトの名無しさん
2017/03/08(水) 23:48:39.27ID:0EPJtM8y シェルとカーネルを縦横無尽に使いこなすのがPerlプログラミングの醍醐味。
667デフォルトの名無しさん
2017/03/09(木) 15:21:10.67ID:lYcZyteE print 1+(2+3);
print (1+2)+3;
この二つの文の違いを使いこなすのが、Perlプログラミングの醍醐味。
print (1+2)+3;
この二つの文の違いを使いこなすのが、Perlプログラミングの醍醐味。
668デフォルトの名無しさん
2017/03/14(火) 00:58:03.78ID:mRCDOzFa awk 由来の 0+ ハックや "". ハックは常識として使いこなすのが、Perlプログラミングのたしなみ。
669デフォルトの名無しさん
2017/03/15(水) 23:38:07.63ID:WjEGzhMP ハックと言ってる時点で使ってはダメなものだ
670デフォルトの名無しさん
2017/03/16(木) 00:17:10.27ID:a1z6pXZc 工夫できないなら何を使ってもダメ
sub to_s { $_[0].'' }
sub to_i { $_[0]+00 }
sub to_s { $_[0].'' }
sub to_i { $_[0]+00 }
671デフォルトの名無しさん
2017/03/16(木) 06:54:07.57ID:t2soddN5 >awk 由来の 0+ ハックや "". ハックは
そもそも、常識でないといいたげな、このレスは何?
まともな参考本読めば、最初の方に書いてある。
ハックでもなんでもない
そもそも、常識でないといいたげな、このレスは何?
まともな参考本読めば、最初の方に書いてある。
ハックでもなんでもない
672デフォルトの名無しさん
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";
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";
673デフォルトの名無しさん
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 = @_; のように一度変数で受け取るのが意図しない変更を防ぐ意味でも良いだろう
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 = @_; のように一度変数で受け取るのが意図しない変更を防ぐ意味でも良いだろう
674デフォルトの名無しさん
2017/03/21(火) 08:41:14.27ID:RAznfVax675デフォルトの名無しさん
2017/03/31(金) 19:10:56.36ID:I7SB2jha print (1+2)+(4+5)+6+7;
3
3
676デフォルトの名無しさん
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)
3
23
print print print (1+2)+(4+5)+6+7;
3
23
1 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
677デフォルトの名無しさん
2017/03/31(金) 22:38:54.66ID:PsuuxH/N $hash{'aaa'}{'bbb'}{'ccc'} = 1;
みたいなことをしても、普通に通るのが凄いよな
それでいて、仕様としては別に多次元ハッシュなんか対応してない
みたいなことをしても、普通に通るのが凄いよな
それでいて、仕様としては別に多次元ハッシュなんか対応してない
678デフォルトの名無しさん
2017/04/01(土) 08:51:48.01ID:AF9KLm8F なにをするんでもいちいちチェックが入って膨大な自動操作が裏で行われてる証拠。
さらに変数と実体を結びつけるデータテーブルもかなりの容量を使用してる。
木構造の探索などをやると、動作がCの10倍程度違うと言われるけど、やってみたらメモリ容量が100倍以上違うことも確認された。(将棋の盤面探索)。
まあ一時的にスクリプトが欲しいときとか、それが良い時はそれで良いけど、
通常のソフトウェアを作る時内部でそんなことが起きれてば完全な欠陥なわけであって。
さらに変数と実体を結びつけるデータテーブルもかなりの容量を使用してる。
木構造の探索などをやると、動作がCの10倍程度違うと言われるけど、やってみたらメモリ容量が100倍以上違うことも確認された。(将棋の盤面探索)。
まあ一時的にスクリプトが欲しいときとか、それが良い時はそれで良いけど、
通常のソフトウェアを作る時内部でそんなことが起きれてば完全な欠陥なわけであって。
679デフォルトの名無しさん
2017/04/01(土) 17:07:22.61ID:y/HEzjsw そうか、100倍以上違うのか。試してみたいからソースコードを見せてくれ。
680デフォルトの名無しさん
2017/04/01(土) 17:19:36.13ID:aXA7htV2 >>678
えーと、インタプリタとコンパイラって知ってるかい?
えーと、インタプリタとコンパイラって知ってるかい?
681デフォルトの名無しさん
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{
$
みたいなことでもしたんだろうか。
$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{
$
みたいなことでもしたんだろうか。
682デフォルトの名無しさん
2017/04/02(日) 12:21:59.20ID:n1w2M1cg683デフォルトの名無しさん
2017/04/02(日) 13:25:59.95ID:zGspEIRF お前の情報源はえらくあやふやだな
684デフォルトの名無しさん
2017/04/02(日) 14:35:50.91ID:n1w2M1cg 「そう言われてる」ってやつだからな。
ただ有名なんで検索すればいろんなところで出てくる。
10倍遅くなるのは、自動処理が8でインタプリタが2、合計10
ただ有名なんで検索すればいろんなところで出てくる。
10倍遅くなるのは、自動処理が8でインタプリタが2、合計10
685デフォルトの名無しさん
2017/04/02(日) 14:37:05.43ID:n1w2M1cg 別に正確な情報どうこうじゃなくて、
おそいのがインタプリタのせいだと思ってるよりずっといいでしょって話
おそいのがインタプリタのせいだと思ってるよりずっといいでしょって話
686デフォルトの名無しさん
2017/04/02(日) 15:56:48.17ID:s5HPpPnI687デフォルトの名無しさん
2017/04/02(日) 16:44:24.11ID:W390vP7B ろくに知らなければこういうことをするかもな、という想像なんだが。わかりにくかったのならすまん。
なにしろ何をしたのかまったく解らないから適当に想像するしかないんだよ。
なにしろ何をしたのかまったく解らないから適当に想像するしかないんだよ。
688デフォルトの名無しさん
2017/04/15(土) 03:58:55.24ID:vTxJoJiF Cでも
伸び縮みを含めた動的なメモリ宣言と開放と、呼び出しの度そのチェックと、管理情報の保存.
動的な値の自動変換と、呼び出しの度そのチェックと、管理情報の保存.
たったこんだけでも超遅くなるか
つか動的な宣言って超遅いよね
伸び縮みを含めた動的なメモリ宣言と開放と、呼び出しの度そのチェックと、管理情報の保存.
動的な値の自動変換と、呼び出しの度そのチェックと、管理情報の保存.
たったこんだけでも超遅くなるか
つか動的な宣言って超遅いよね
689デフォルトの名無しさん
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)';
これ毎回書くんだが、全部省略できないかの
すぐこれ書くの忘れて文字コード関係でおかしくなるし、書いたら書いたで無駄に目障りなんだが・・・
use utf8;
use strict;
use warnings;
binmode STDIN, ':encoding(utf8)';
binmode STDOUT, ':encoding(utf8)';
binmode STDERR, ':encoding(utf8)';
これ毎回書くんだが、全部省略できないかの
すぐこれ書くの忘れて文字コード関係でおかしくなるし、書いたら書いたで無駄に目障りなんだが・・・
690デフォルトの名無しさん
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が見つかるようにする
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が見つかるようにする
691デフォルトの名無しさん
2017/04/15(土) 10:52:14.57ID:DbxhuG0l そういやutf8なら
binmode STDOUT, ':utf8';
で良かったか
binmode STDOUT, ':utf8';
で良かったか
692デフォルトの名無しさん
2017/04/15(土) 20:57:19.56ID:GBtgusH0 >>677
参照の -> を参照に対しては省略できるってだけだが。
参照の -> を参照に対しては省略できるってだけだが。
693デフォルトの名無しさん
2017/04/15(土) 21:19:29.96ID:4y1tBhnC それが凄いところ
オブジェクト指向だって、ほんの小手先でちゃんと実用になるものを実装しちゃってる
オブジェクト指向だって、ほんの小手先でちゃんと実用になるものを実装しちゃってる
694デフォルトの名無しさん
2017/04/15(土) 23:53:13.69ID:k4jkkg7x695デフォルトの名無しさん
2017/04/15(土) 23:58:43.13ID:4y1tBhnC 言語なんてそれでいいだろ
標準に拘っても何も得しない
標準に拘っても何も得しない
696デフォルトの名無しさん
2017/04/16(日) 00:42:48.16ID:cCOM2/u0697デフォルトの名無しさん
2017/04/16(日) 00:57:54.05ID:h3ZKvGOL どうせ定番の奴がデファクトスタンダードになるんだから同じことだ
698デフォルトの名無しさん
2017/04/16(日) 01:01:17.12ID:cCOM2/u0 その定番が生まれなかったんだろ
699デフォルトの名無しさん
2017/04/16(日) 06:42:15.56ID:h3ZKvGOL それは目的がニッチ過ぎたか利用者が少なすぎたからで、
どっちにしろ標準になんかならない
どっちにしろ標準になんかならない
700デフォルトの名無しさん
2017/04/20(木) 20:48:25.04ID:6ZaZCTR2 Perl6 ? そういえばそうゆうものもあったな。ググると、
1年半前に正式安定版がリリースされたのか。知らなかった。
誰も、その事を話題にすらしていないし。
http://tamae.2ch.net/test/read.cgi/php/1162721943/
「 Perl6/Parrotスレ - Part2 」
1年半前に正式安定版がリリースされたのか。知らなかった。
誰も、その事を話題にすらしていないし。
http://tamae.2ch.net/test/read.cgi/php/1162721943/
「 Perl6/Parrotスレ - Part2 」
701デフォルトの名無しさん
2017/04/20(木) 21:37:11.61ID:3zMwUShO Perl6は別の言語だからな
702デフォルトの名無しさん
2017/04/20(木) 22:48:25.36ID:QXbdV/cO pythonもバージョンが上がって別言語になった
703デフォルトの名無しさん
2017/04/20(木) 22:52:03.43ID:NBs+Bll8 >>702
なってないわ
なってないわ
704デフォルトの名無しさん
2017/04/20(木) 23:04:27.00ID:Viw0Nzyo >>689+690
PERL5OPTと組み合わせれば全て解消。
PERL5OPTと組み合わせれば全て解消。
705デフォルトの名無しさん
2017/04/23(日) 19:39:54.82ID:W+YLVZyj706デフォルトの名無しさん
2017/04/23(日) 19:56:30.69ID:W+YLVZyj >>689
use encoding は?
use encoding は?
707デフォルトの名無しさん
2017/04/30(日) 10:11:15.92ID:zwl8qhxW >>705
理論上完全に最適化できたとしても速度差は5倍以上あるよ
理論上完全に最適化できたとしても速度差は5倍以上あるよ
708デフォルトの名無しさん
2017/05/03(水) 00:40:52.14ID:M+hoQd/o $str = "みかん りんご ぶどう";
を・みかん ・りんご ・ぶどうというように文字の最初に・をつけるには
どう置換すればいいんですか?
を・みかん ・りんご ・ぶどうというように文字の最初に・をつけるには
どう置換すればいいんですか?
709デフォルトの名無しさん
2017/05/03(水) 00:56:20.79ID:weHSRqvf join '', map { '・' . $_ } split ' ', $str;
710デフォルトの名無しさん
2017/05/03(水) 01:07:15.97ID:Qv6lwwF1 $str =~ s/(\w+)/・$1/g;
711デフォルトの名無しさん
2017/05/03(水) 01:13:44.21ID:i0PT5y6P 試してないだろ
712デフォルトの名無しさん
2017/05/03(水) 02:22:37.42ID:0sDWrHda linux mint18
perl6のインストールについて
$ sudo apt install rakudo
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
E: パッケージ rakudo が見つかりません
どうしたらインストールできます?
perl6のインストールについて
$ sudo apt install rakudo
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
E: パッケージ rakudo が見つかりません
どうしたらインストールできます?
713デフォルトの名無しさん
2017/05/03(水) 02:40:51.60ID:0sDWrHda $ perl6 -v
This is perl6 version 2015.11 built on MoarVM version 2015.11
すいません、解決しました
This is perl6 version 2015.11 built on MoarVM version 2015.11
すいません、解決しました
714デフォルトの名無しさん
2017/05/11(木) 19:50:38.19ID:nIm7OIQv POD書いてる?
715デフォルトの名無しさん
2017/05/11(木) 23:25:04.61ID:nen5x9dT メモリリーク検出になに使ってる?
とりあえず昔からTest::LeakTrace使ってるんだけど
いまはもっと便利なものがあったりするのかな?
とりあえず昔からTest::LeakTrace使ってるんだけど
いまはもっと便利なものがあったりするのかな?
716デフォルトの名無しさん
2017/05/24(水) 13:05:14.66ID:9utV0RoM Perl/Qt は癖があるね、Perl/Qtとクラスを同時に使おうとするとなかなか大変。
717デフォルトの名無しさん
2017/05/28(日) 12:56:56.81ID:+Ey6Jlm8 テキストファイルを読み込むときに
// (例えばfile://...)
があると、そこから行末まで読み込めない現象が起きるんだけど
どうしたらちゃんと読み込める?
binmodeにしても解決しなかった
// (例えばfile://...)
があると、そこから行末まで読み込めない現象が起きるんだけど
どうしたらちゃんと読み込める?
binmodeにしても解決しなかった
718デフォルトの名無しさん
2017/05/28(日) 13:01:09.18ID:+Ey6Jlm8719デフォルトの名無しさん
2017/05/28(日) 14:02:42.07ID:0c9kwMSl そんな訳ない
720デフォルトの名無しさん
2017/05/28(日) 14:05:21.98ID:9RwfEHwH ファイルハンドルからダブルスラッシュが含まれる行を読み込もうとするとダブルスラッシュが行末と誤認されるという解釈でいいんですかね
721デフォルトの名無しさん
2017/05/28(日) 14:33:51.85ID:eFuC5yco 絶対になにかカンチガイしてるだろう。
単に出力のバッファリングで単に表示されてないだけとか。
もしくは自分で"//"以降を削除するような処理をしているとかだな。
正規表現の書き誤りがあやしい。
単に出力のバッファリングで単に表示されてないだけとか。
もしくは自分で"//"以降を削除するような処理をしているとかだな。
正規表現の書き誤りがあやしい。
722デフォルトの名無しさん
2017/05/28(日) 14:59:23.09ID:0c9kwMSl 実際に、>>717の方法で読ませればちゃんと読む筈
怪しい箇所を削っていって試せばいい
怪しい箇所を削っていって試せばいい
723デフォルトの名無しさん
2017/05/28(日) 15:01:31.81ID:/dM5Kslk >>717
再現コードを
再現コードを
724717
2017/05/28(日) 16:52:39.75ID:+Ey6Jlm8 カンチガイでした
別のところでCのコメント削除をしていて
そこで消えてました
テヘペロ
別のところでCのコメント削除をしていて
そこで消えてました
テヘペロ
725デフォルトの名無しさん
2017/05/28(日) 18:05:45.48ID:DFLy+ixu ま、そんなもんよ
いい経験したな
次に活かせよ
いい経験したな
次に活かせよ
726デフォルトの名無しさん
2017/05/28(日) 20:22:17.89ID:4xPNWoV3 C/C++のソースコードを読んで
コメント削除したソースコード
ifdefとかのプリプロセスしたソースコード
typedef, struct, unionとかを抽出した結果
を得たいんだけどどうするのがいいだろう
プリプロセスしたソースコードをcflowに渡すと
関数コールツリーを得られるから
それらを使ってCのソースコード理解に役立てたい
コメント削除したソースコード
ifdefとかのプリプロセスしたソースコード
typedef, struct, unionとかを抽出した結果
を得たいんだけどどうするのがいいだろう
プリプロセスしたソースコードをcflowに渡すと
関数コールツリーを得られるから
それらを使ってCのソースコード理解に役立てたい
727デフォルトの名無しさん
2017/05/28(日) 21:37:34.83ID:QPUrPhGM >>726
何が難しいのか、なんでそんなことをしたいのかよくわからん。
何が難しいのか、なんでそんなことをしたいのかよくわからん。
728デフォルトの名無しさん
2017/05/28(日) 22:39:53.18ID:H3cdg50W >>726
自前で作るって話からは外れるけど、Doxygenに突っ込むとかじゃダメなの?
自前で作るって話からは外れるけど、Doxygenに突っ込むとかじゃダメなの?
729デフォルトの名無しさん
2017/05/29(月) 06:06:36.99ID:iFMZQ+Zt >>727
Cのソースコード理解のため
難しいのは例えばif x>=10 && (defined(y) || z==1)とか
ifdef elif else endifとかの入れ子とか
を正しくパースしたりすること
structを抽出したあと
それらの参照関係も図示したい
Cのソースコード理解のため
難しいのは例えばif x>=10 && (defined(y) || z==1)とか
ifdef elif else endifとかの入れ子とか
を正しくパースしたりすること
structを抽出したあと
それらの参照関係も図示したい
730デフォルトの名無しさん
2017/05/29(月) 06:07:01.52ID:iFMZQ+Zt >>727
簡単なら作ってgitとかにあげてほしい
簡単なら作ってgitとかにあげてほしい
731デフォルトの名無しさん
2017/05/29(月) 06:09:33.49ID:iFMZQ+Zt732デフォルトの名無しさん
2017/05/29(月) 06:15:46.76ID:1pPkP4QE gcc -E じゃだめなのか。
cpp のソースコードを読んでみるのがいいと思うよ。
昔、LSI-C 86 のプリプロセッサのソースコード読んで勉強したなあ。
cpp のソースコードを読んでみるのがいいと思うよ。
昔、LSI-C 86 のプリプロセッサのソースコード読んで勉強したなあ。
733デフォルトの名無しさん
2017/05/29(月) 07:11:36.94ID:7MORbIbH >>726
cflowの中でプリプロセスするから事前にする必要はないと思うけど
cflowの中でプリプロセスするから事前にする必要はないと思うけど
734デフォルトの名無しさん
2017/05/29(月) 17:52:39.84ID:aFd0yPA1735デフォルトの名無しさん
2017/05/29(月) 18:14:45.54ID:aFd0yPA1 例えば
#define ERRLVL 5
#define WARLVL 3
とかなってるのをプリプロセスすると
数字に置き換わるので意味が判りにくくなる
だけど#ifdefとかはプリプロセスしないと
例えば32ビット版の関数や構造体と
64ビット版の関数や構造体が重複してしまう
#define ERRLVL 5
#define WARLVL 3
とかなってるのをプリプロセスすると
数字に置き換わるので意味が判りにくくなる
だけど#ifdefとかはプリプロセスしないと
例えば32ビット版の関数や構造体と
64ビット版の関数や構造体が重複してしまう
736デフォルトの名無しさん
2017/05/30(火) 04:54:25.56ID:Al54U2am CPAN に Text::CPP なんてのがあるよ。
そのままではご要望どおりじゃないと思うけど参考にはなるかも。
そのままではご要望どおりじゃないと思うけど参考にはなるかも。
737デフォルトの名無しさん
2017/05/30(火) 20:58:34.87ID:Al54U2am 言いたいことはよく解る。
とりあえず、プリプロセッサの通常の動作から変更したいのは
・C ソースの中のマクロ置換はしない
・#define ディレクティブは用済みになっていないのでそのまま出力する
といったところ?
もし Text::CPP の作者がそれを有意義だと思ってくれたら、
なんとかしてくれる可能性もなくはないかもしれないな。
連絡先は README に書いてあるよ。
とりあえず、プリプロセッサの通常の動作から変更したいのは
・C ソースの中のマクロ置換はしない
・#define ディレクティブは用済みになっていないのでそのまま出力する
といったところ?
もし Text::CPP の作者がそれを有意義だと思ってくれたら、
なんとかしてくれる可能性もなくはないかもしれないな。
連絡先は README に書いてあるよ。
738デフォルトの名無しさん
2017/05/30(火) 21:10:46.26ID:Al54U2am cpp をそのまま使うという方法もなくはないよ。
#define ディレクティブの前と C ソーステキストの前の行に
#line ディレクティブを入れる。
cpp の処理結果には #line ディレクティブがあるから
それを手がかりに元のファイルからコピーする。
この程度のことなら出来そうじゃない?
#define ディレクティブの前と C ソーステキストの前の行に
#line ディレクティブを入れる。
cpp の処理結果には #line ディレクティブがあるから
それを手がかりに元のファイルからコピーする。
この程度のことなら出来そうじゃない?
739726
2017/06/01(木) 00:33:15.15ID:mVcFCi6e 作ってみたけどバグがあるだろう
https://github.com/bran1219/mycpp
https://github.com/bran1219/mycpp
740デフォルトの名無しさん
2017/06/04(日) 17:04:48.43ID:JLuePf+9 あまり野暮なことはいいたくないけど、ファイルハンドルから行を読むんじゃなくて
トークンを読んだ方がシンプルに書けるんじゃないかな。そうすれば
while(( my $tokentype,my $str) = gettoken( $fh)){
if ( $tokentype == 'comment'){ case_comment;}
elsif ( $tokentype == 'string'){ case_string;}
みたいなやり方が出来る。気を悪くしないでほしい。本当にそう思ったんだ。
トークンを読んだ方がシンプルに書けるんじゃないかな。そうすれば
while(( my $tokentype,my $str) = gettoken( $fh)){
if ( $tokentype == 'comment'){ case_comment;}
elsif ( $tokentype == 'string'){ case_string;}
みたいなやり方が出来る。気を悪くしないでほしい。本当にそう思ったんだ。
741デフォルトの名無しさん
2017/06/05(月) 23:40:47.35ID:AlRALdx8 gettoken()を作ってread()で一文字ずつ読み込んでトークンを返すのは良さそうだけど
トークンタイプはその時の状態が判らないと判別できないと思う
//は普通の状態で現れたらコメント開始だけど
"の中だと文字列
/*の中だとコメント文字列
トークンタイプはその時の状態が判らないと判別できないと思う
//は普通の状態で現れたらコメント開始だけど
"の中だと文字列
/*の中だとコメント文字列
742デフォルトの名無しさん
2017/06/09(金) 13:39:22.36ID:jmjGKHXw tcpのIO::Socket使ってサーバーに対してconnectした後、closeせずに親プロセスは接続を維持したまま、
forkした子プロセスでサーバーから受信した大量の文字列をファイルに書くとかするには子プロセスが継承したソケットをどう破棄したらいいの?
現状では当然の事ながら親プロセスの受信待ちが完全に止まってしまって困ってます
forkした子プロセスでサーバーから受信した大量の文字列をファイルに書くとかするには子プロセスが継承したソケットをどう破棄したらいいの?
現状では当然の事ながら親プロセスの受信待ちが完全に止まってしまって困ってます
743デフォルトの名無しさん
2017/06/09(金) 14:33:09.33ID:1EhRpyQk なぜ子プロセスでコネクトしないの?
744デフォルトの名無しさん
2017/06/09(金) 14:41:19.37ID:jmjGKHXw >>743
客先のサーバーの仕様とやらで複数の接続(connect)に対応していない模様(爆)
客先のサーバーの仕様とやらで複数の接続(connect)に対応していない模様(爆)
745デフォルトの名無しさん
2017/06/09(金) 19:57:08.76ID:ipZEdn/U >>744
親プロセスの接続を切れば複数接続じゃなくなると思う
親プロセスの接続を切れば複数接続じゃなくなると思う
746742
2017/06/10(土) 02:10:59.82ID:6TQL4PKJ 解決しました
fork()してから普通に子プロセス側で$socket->close();すれば良かったのですね。
ありがとうございました
fork()してから普通に子プロセス側で$socket->close();すれば良かったのですね。
ありがとうございました
747デフォルトの名無しさん
2017/06/13(火) 00:27:54.86ID:5t+GNw1N >>667,675-676
なぜこうなるの?
なぜこうなるの?
748デフォルトの名無しさん
2017/06/13(火) 02:06:41.19ID:Z49xlslC ヒント:
print"Hello world!\n";
print "Hello world!\n";
print("Hello world!\n");
print ( "Hello world!\n" );
print"Hello world!\n";
print "Hello world!\n";
print("Hello world!\n");
print ( "Hello world!\n" );
749デフォルトの名無しさん
2017/06/13(火) 06:02:24.69ID:TrwiR2C4 1. print 文は実行が成功するとTrue(1)を返す
2. すべての引数を括弧で括るのでなければ、print というキーワードの 次に開き括弧を書いてはいけません
ってだけの話。
print print print (1+2)+(4+5)+6+7;
は、
print (1+2) を実行したあとに
print 1+(4+5)+6+7実行して、
その戻り値1をプリントしてるだけ。
2. すべての引数を括弧で括るのでなければ、print というキーワードの 次に開き括弧を書いてはいけません
ってだけの話。
print print print (1+2)+(4+5)+6+7;
は、
print (1+2) を実行したあとに
print 1+(4+5)+6+7実行して、
その戻り値1をプリントしてるだけ。
750デフォルトの名無しさん
2017/06/14(水) 00:26:46.99ID:J0vYxrWi751デフォルトの名無しさん
2017/06/14(水) 07:10:52.51ID:nXcqV3BV >>741
そんな面倒なことを考えなくてもいいように gettoken を書くんだよ。
普通は C の文字列定数の中でわざわざ // を認識しない。どんなやりかたを考えてるの?
興味があるなら flex とかやったみたらどうかな。
そんな面倒なことを考えなくてもいいように gettoken を書くんだよ。
普通は C の文字列定数の中でわざわざ // を認識しない。どんなやりかたを考えてるの?
興味があるなら flex とかやったみたらどうかな。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市総理の“失言”を引き出したはずがSNSで総スカン ビジネスモデルが崩壊した「立憲民主党」の迷走★2 [♪♪♪★]
- Z世代、35%が週休3日希望 「無理せず・安定」に重き 民間調査 [♪♪♪★]
- 【速報】 中国国営新聞社 「日本はすでに代価を支払った」 中国SNSで1位に 高市総理の発言めぐり ★4 [お断り★]
- 斎藤元彦・兵庫県知事、関西学院大学での「講演」予定に波紋 法学部長がコメント「教授会は承認せず」「利用されているようで不愉快」 [ぐれ★]
- 石破前首相 おこめ券配布に「その原資は何?国民の税金でしょう」「リーズナブルな価格でお米が手に入るようにすることの方が大事」 [muffin★]
- 【発信国情報】X、プロフィール上に「VPN使用の有無」も表示か… ★2 [BFU★]
- 高市さんのG20遅刻問題洒落にならないことになってた、日本抜きで全会一致で中国寄りの首脳宣言が採択されてそのまま有無を言わさず閉幕 [709039863]
- おほぉ///
- 【画像】とんでもねえ地下アイドル ついにデビューさるるwww [743999204]
- 女「中はだめ!」俺「堕ろせばいいっしょ!」
- 地球平面論者をいじめるのは良くない
- 【日本一決定戦】静岡県民ちょっと来いkskすっぞ【富士山は静岡】
