- 1 名前:デフォルトの名無しさん [2014/02/19(水) 23:36:23.29 .net]
- CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。 (WEBプログラミング板: 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箱目 toro.2ch.net/test/read.cgi/tech/1381561905/ Perlについての質問箱 62箱目 toro.2ch.net/test/read.cgi/tech/1385039352/
- 681 名前:デフォルトの名無しさん mailto:sage [2017/02/27(月) 08:44:24.40 ID:hOw/b7i/.net]
- readdirのユニコード版なら、こうゆうモジュールもある。
search.cpan.org/~xaicron/Win32-Unicode-0.26/lib/Win32/Unicode/Dir.pm
- 682 名前:デフォルトの名無しさん mailto:sage [2017/02/27(月) 18:47:01.31 ID:dx1g9tP+.net]
- unicodeは入ってない
単に長いだけ
- 683 名前:デフォルトの名無しさん mailto:sage [2017/02/27(月) 22:36:40.65 ID:8LXDZxYt.net]
- Win32::LongPathは?
- 684 名前:デフォルトの名無しさん mailto:sage [2017/02/27(月) 22:51:51.90 ID:dx1g9tP+.net]
- それを使うと、既存のreaddir の挙動が変わるの?
- 685 名前:デフォルトの名無しさん mailto:sage [2017/02/27(月) 23:21:59.22 ID:/TfvNrk0k]
- 最大パス長260バイト制限に引っかかってるなら、
Win32APIのW系(Unicode)を利用するモジュールを使えば、260文字までは行ける。
- 686 名前:デフォルトの名無しさん mailto:sage [2017/02/28(火) 08:31:44.98 ID:ECHoSeWI.net]
- >>667
「長い」って何文字なん?260文字以下だと問題ないはず。
- 687 名前:デフォルトの名無しさん mailto:sage [2017/02/28(火) 18:54:26.71 ID:Gbg+HMKR.net]
- それ以上あったので問題があった
- 688 名前:デフォルトの名無しさん mailto:sage [2017/03/01(水) 08:44:35.66 ID:RfMjQxG+.net]
- Windowsで260文字以上のファイル名を普通に作ろうとすると、
「ファイル名が長すぎる」とエラーが出るが、 ネットワークドライブを使うと、作れてしまうようだ。 ただ、それを実際に使おうとすると、ドツボに嵌るみたいだな。
- 689 名前:デフォルトの名無しさん mailto:sage [2017/03/01(水) 21:51:27.16 ID:KTTjixcr.net]
- ファイル名っていうか、パスを含めた長さな
- 690 名前:デフォルトの名無しさん mailto:sage [2017/03/05(日) 00:13:47.26 ID:hhHVIZUN.net]
- @file = split(/\n/,`dir /s /b *.* 2>NUL`);
な。次スレのテンプレに追加するから。
- 691 名前:デフォルトの名無しさん mailto:sage [2017/03/05(日) 15:57:50.73 ID:des1Iukd.net]
- forkするのOKなら何でもありじゃん
- 692 名前:デフォルトの名無しさん mailto:sage [2017/03/08(水) 23:48:39.27 ID:0EPJtM8y.net]
- シェルとカーネルを縦横無尽に使いこなすのがPerlプログラミングの醍醐味。
- 693 名前:デフォルトの名無しさん mailto:sage [2017/03/09(木) 15:21:10.67 ID:lYcZyteE.net]
- print 1+(2+3);
print (1+2)+3; この二つの文の違いを使いこなすのが、Perlプログラミングの醍醐味。
- 694 名前:デフォルトの名無しさん mailto:sage [2017/03/14(火) 00:58:03.78 ID:mRCDOzFa.net]
- awk 由来の 0+ ハックや "". ハックは常識として使いこなすのが、Perlプログラミングのたしなみ。
- 695 名前:デフォルトの名無しさん mailto:sage [2017/03/15(水) 23:38:07.63 ID:WjEGzhMP.net]
- ハックと言ってる時点で使ってはダメなものだ
- 696 名前:デフォルトの名無しさん mailto:sage [2017/03/16(木) 00:17:10.27 ID:a1z6pXZc.net]
- 工夫できないなら何を使ってもダメ
sub to_s { $_[0].'' } sub to_i { $_[0]+00 }
- 697 名前:デフォルトの名無しさん mailto:sage [2017/03/16(木) 06:54:07.57 ID:t2soddN5.net]
- >awk 由来の 0+ ハックや "". ハックは
そもそも、常識でないといいたげな、このレスは何? まともな参考本読めば、最初の方に書いてある。 ハックでもなんでもない
- 698 名前:デフォルトの名無しさん mailto:sage [2017/03/20(月) 17:47:23.90 ID:5loIUxX7.net]
- Win-7、Active Perl 5.16です。Unicode文字を含むperlの処理結果を
utf16leで出力しようとしています。下のようにやってみましたが、ダメでした。 出力をバイナリエディタでみると、改行コードが変な風にいじられていました。 binmode STDOUT =>
- 699 名前:":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"; [] - [ここ壊れてます]
- 700 名前:デフォルトの名無しさん mailto:sage [2017/03/20(月) 19:53:29.20 ID:SJAmj6b4.net]
- >改行コードが変な風にいじられていました
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 = @_; のように一度変数で受け取るのが意図しない変更を防ぐ意味でも良いだろう
- 701 名前:デフォルトの名無しさん mailto:sage [2017/03/21(火) 08:41:14.27 ID:RAznfVax.net]
- >>682
672です。 よく解りました。 ありがとうございました。
- 702 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 19:10:56.36 ID:I7SB2jha.net]
- print (1+2)+(4+5)+6+7;
3
- 703 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 21:37:50.01 ID:lffYMjCi.net]
- 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)
- 704 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 22:38:54.66 ID:PsuuxH/N.net]
- $hash{'aaa'}{'bbb'}{'ccc'} = 1;
みたいなことをしても、普通に通るのが凄いよな それでいて、仕様としては別に多次元ハッシュなんか対応してない
- 705 名前:デフォルトの名無しさん mailto:sage [2017/04/01(土) 08:51:48.01 ID:AF9KLm8F.net]
- なにをするんでもいちいちチェックが入って膨大な自動操作が裏で行われてる証拠。
さらに変数と実体を結びつけるデータテーブルもかなりの容量を使用してる。 木構造の探索などをやると、動作がCの10倍程度違うと言われるけど、やってみたらメモリ容量が100倍以上違うことも確認された。(将棋の盤面探索)。 まあ一時的にスクリプトが欲しいときとか、それが良い時はそれで良いけど、 通常のソフトウェアを作る時内部でそんなことが起きれてば完全な欠陥なわけであって。
- 706 名前:デフォルトの名無しさん [2017/04/01(土) 17:07:22.61 ID:y/H
]
- [ここ壊れてます]
- 707 名前:Ezjsw.net mailto: そうか、100倍以上違うのか。試してみたいからソースコードを見せてくれ。 []
- [ここ壊れてます]
- 708 名前:デフォルトの名無しさん mailto:sage [2017/04/01(土) 17:19:36.13 ID:aXA7htV2.net]
- >>687
えーと、インタプリタとコンパイラって知ってるかい?
- 709 名前:デフォルトの名無しさん [2017/04/02(日) 11:42:32.36 ID:W390vP7B.net]
- 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{ $ みたいなことでもしたんだろうか。
- 710 名前:デフォルトの名無しさん mailto:sage [2017/04/02(日) 12:21:59.20 ID:n1w2M1cg.net]
- >>689
インタプリタとコンパイラの速度差は2倍未満と言われてるけどな この場合は自動型変換などの暗黙の処理とデータテーブルが問題。 もちろん自動型のコンパイラを使用しても同じ結果になる。
- 711 名前:デフォルトの名無しさん mailto:sage [2017/04/02(日) 13:25:59.95 ID:zGspEIRF.net]
- お前の情報源はえらくあやふやだな
- 712 名前:デフォルトの名無しさん mailto:sage [2017/04/02(日) 14:35:50.91 ID:n1w2M1cg.net]
- 「そう言われてる」ってやつだからな。
ただ有名なんで検索すればいろんなところで出てくる。 10倍遅くなるのは、自動処理が8でインタプリタが2、合計10
- 713 名前:デフォルトの名無しさん mailto:sage [2017/04/02(日) 14:37:05.43 ID:n1w2M1cg.net]
- 別に正確な情報どうこうじゃなくて、
おそいのがインタプリタのせいだと思ってるよりずっといいでしょって話
- 714 名前:デフォルトの名無しさん mailto:sage [2017/04/02(日) 15:56:48.17 ID:s5HPpPnI.net]
- >>690
1行目とその先の関連がよく分からんが perldoc.jp/func/vec
- 715 名前:デフォルトの名無しさん [2017/04/02(日) 16:44:24.11 ID:W390vP7B.net]
- ろくに知らなければこういうことをするかもな、という想像なんだが。わかりにくかったのならすまん。
なにしろ何をしたのかまったく解らないから適当に想像するしかないんだよ。
- 716 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 03:58:55.24 ID:vTxJoJiF.net]
- Cでも
伸び縮みを含めた動的なメモリ宣言と開放と、呼び出しの度そのチェックと、管理情報の保存. 動的な値の自動変換と、呼び出しの度そのチェックと、管理情報の保存. たったこんだけでも超遅くなるか つか動的な宣言って超遅いよね
- 717 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 04:02:38.36 ID:vTxJoJiF.net]
- それはそうと俺も稀にPerlやるんだが、
use utf8; use strict; use warnings; binmode STDIN, ':encoding(utf8)'; binmode STDOUT, ':encoding(utf8)'; binmode STDERR, ':encoding(utf8)'; これ毎回書くんだが、全部省略できないかの すぐこれ書くの忘れて文字コード関係でおかしくなるし、書いたら書いたで無駄に目障りなんだが・・・
- 718 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:45:22.06 ID:DbxhuG0l.net]
- # 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が見つかるようにする
- 719 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:52:14.57 ID:DbxhuG0l.net]
- そういやutf8なら
binmode STDOUT, ':utf8'; で良かったか
- 720 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 20:57:19.56 ID:GBtgusH0.net]
- >>686
参照の -> を参照に対しては省略できるってだけだが。
- 721 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 21:19:29.96 ID:4y1tBhnC.net]
- それが凄いところ
オブジェクト指向だって、ほんの小手先でちゃんと実用になるものを実装しちゃってる
- 722 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 23:53:13.69 ID:k4jkkg7x.net]
- >>702
最低レベルな。 小手先で済ませちゃったから、それ以上の 便利な機能はライブラリ任せになっちゃって いつまでも標準が生まれなかった。 Perl6にさっさと移行すればいいのに
- 723 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 23:58:43.13 ID:4y1tBhnC.net]
- 言語なんてそれでいいだろ
標準に拘っても何も得しない
- 724 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 00:42:48.16 ID:cCOM2/u0.net]
- >>704
可読性の問題だ。 意味は全く一緒なのに、書き方を変えてどうする? 言語を変えるのと一緒だぞ
- 725 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 00:57:54.05 ID:h3ZKvGOL.net]
- どうせ定番の奴がデファクトスタンダードになるんだから同じことだ
- 726 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 01:01:17.12 ID:cCOM2/u0.net]
- その定番が生まれなかったんだろ
- 727 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 06:42:15.56 ID:h3ZKvGOL.net]
- それは目的がニッチ過ぎたか利用者が少なすぎたからで、
どっちにしろ標準になんかならない
- 728 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 20:48:25.04 ID:6ZaZCTR2.net]
- Perl6 ? そういえばそうゆうものもあったな。ググると、
1年半前に正式安定版がリリースされたのか。知らなかった。 誰も、その事を話題にすらしていないし。 tamae.2ch.net/test/read.cgi/php/1162721943/ 「 Perl6/Parrotスレ - Part2 」
- 729 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 21:37:11.61 ID:3zMwUShO.net]
- Perl6は別の言語だからな
- 730 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 22:48:25.36 ID:QXbdV/cO.net]
- pythonもバージョンが上がって別言語になった
- 731 名前:デフォルトの名無しさん [2017/04/20(木) 22:52:03.43 ID:NBs+Bll8.net]
- >>711
なってないわ
- 732 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 23:04:27.00 ID:Viw0Nzyo.net]
- >>698+699
PERL5OPTと組み合わせれば全て解消。
- 733 名前:デフォルトの名無しさん mailto:sage [2017/04/23(日) 19:39:54.82 ID:W+YLVZyj.net]
- >>697
そうか?ディスクI/Oが絡まないようなメモリ上だけの操作ならさほど遅い感じしないけど。 まあ、単純なのと比べたら遅いけどね。
- 734 名前:デフォルトの名無しさん mailto:sage [2017/04/23(日) 19:56:30.69 ID:W+YLVZyj.net]
- >>698
use encoding は?
- 735 名前:デフォルトの名無しさん mailto:sage [2017/04/30(日) 10:11:15.92 ID:zwl8qhxW.net]
- >>714
理論上完全に最適化できたとしても速度差は5倍以上あるよ
- 736 名前:デフォルトの名無しさん [2017/05/03(水) 00:40:52.14 ID:M+hoQd/o.net]
- $str = "みかん りんご ぶどう";
を・みかん ・りんご ・ぶどうというように文字の最初に・をつけるには どう置換すればいいんですか?
- 737 名前:デフォルトの名無しさん mailto:sage [2017/05/03(水) 00:56:20.79 ID:weHSRqvf.net]
- join '', map { '・' . $_ } split ' ', $str;
- 738 名前:デフォルトの名無しさん [2017/05/03(水) 01:07:15.97 ID:Qv6lwwF1.net]
- $str =~ s/(\w+)/・$1/g;
- 739 名前:デフォルトの名無しさん mailto:sage [2017/05/03(水) 01:13:44.21 ID:i0PT5y6P.net]
- 試してないだろ
- 740 名前:デフォルトの名無しさん [2017/05/03(水) 02:22:37.42 ID:0sDWrHda.net]
- linux mint18
perl6のインストールについて $ sudo apt install rakudo パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 E: パッケージ rakudo が見つかりません どうしたらインストールできます?
- 741 名前:デフォルトの名無しさん [2017/05/03(水) 02:40:51.60 ID:0sDWrHda.net]
- $ perl6 -v
This is perl6 version 2015.11 built on MoarVM version 2015.11 すいません、解決しました
- 742 名前:デフォルトの名無しさん mailto:sage [2017/05/11(木) 19:50:38.19 ID:nIm7OIQv.net]
- POD書いてる?
- 743 名前:デフォルトの名無しさん mailto:sage [2017/05/11(木) 23:25:04.61 ID:nen5x9dT.net]
- メモリリーク検出になに使ってる?
とりあえず昔からTest::LeakTrace使ってるんだけど いまはもっと便利なものがあったりするのかな?
- 744 名前:デフォルトの名無しさん [2017/05/24(水) 13:05:14.66 ID:9utV0RoM.net]
- Perl/Qt は癖があるね、Perl/Qtとクラスを同時に使おうとするとなかなか大変。
- 745 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 12:56:56.81 ID:+Ey6Jlm8.net]
- テキストファイルを読み込むときに
- 746 名前:
// (例えばfile://...) があると、そこから行末まで読み込めない現象が起きるんだけど どうしたらちゃんと読み込める? binmodeにしても解決しなかった [] - [ここ壊れてます]
- 747 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 13:01:09.18 ID:+Ey6Jlm8.net]
- >>726
open fp, "<$file"; while(<fp>){ print $_; } みたいな感じで読み込んでる
- 748 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 14:02:42.07 ID:0c9kwMSl.net]
- そんな訳ない
- 749 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 14:05:21.98 ID:9RwfEHwH.net]
- ファイルハンドルからダブルスラッシュが含まれる行を読み込もうとするとダブルスラッシュが行末と誤認されるという解釈でいいんですかね
- 750 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 14:33:51.85 ID:eFuC5yco.net]
- 絶対になにかカンチガイしてるだろう。
単に出力のバッファリングで単に表示されてないだけとか。 もしくは自分で"//"以降を削除するような処理をしているとかだな。 正規表現の書き誤りがあやしい。
- 751 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 14:59:23.09 ID:0c9kwMSl.net]
- 実際に、>>726の方法で読ませればちゃんと読む筈
怪しい箇所を削っていって試せばいい
- 752 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 15:01:31.81 ID:/dM5Kslk.net]
- >>726
再現コードを
- 753 名前:717 mailto:sage [2017/05/28(日) 16:52:39.75 ID:+Ey6Jlm8.net]
- カンチガイでした
別のところでCのコメント削除をしていて そこで消えてました テヘペロ
- 754 名前:デフォルトの名無しさん [2017/05/28(日) 18:05:45.48 ID:DFLy+ixu.net]
- ま、そんなもんよ
いい経験したな 次に活かせよ
- 755 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 20:22:17.89 ID:4xPNWoV3.net]
- C/C++のソースコードを読んで
コメント削除したソースコード ifdefとかのプリプロセスしたソースコード typedef, struct, unionとかを抽出した結果 を得たいんだけどどうするのがいいだろう プリプロセスしたソースコードをcflowに渡すと 関数コールツリーを得られるから それらを使ってCのソースコード理解に役立てたい
- 756 名前:デフォルトの名無しさん [2017/05/28(日) 21:37:34.83 ID:QPUrPhGM.net]
- >>735
何が難しいのか、なんでそんなことをしたいのかよくわからん。
- 757 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 22:39:53.18 ID:H3cdg50W.net]
- >>735
自前で作るって話からは外れるけど、Doxygenに突っ込むとかじゃダメなの?
- 758 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 06:06:36.99 ID:iFMZQ+Zt.net]
- >>736
Cのソースコード理解のため 難しいのは例えばif x>=10 && (defined(y) || z==1)とか ifdef elif else endifとかの入れ子とか を正しくパースしたりすること structを抽出したあと それらの参照関係も図示したい
- 759 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 06:07:01.52 ID:iFMZQ+Zt.net]
- >>736
簡単なら作ってgitとかにあげてほしい
- 760 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 06:09:33.49 ID:iFMZQ+Zt.net]
- >>737
プリプロセスする前のコードだと重複したりすると思う gcc -Eとかだと #defineとかまで展開されるからそれは抑えたい
- 761 名前:デフォルトの名無しさん [2017/05/29(月) 06:15:46.76 ID:1pPkP4QE.net]
- gcc -E じゃだめなのか。
cpp のソースコードを読んでみるのがいいと思うよ。 昔、LSI-C 86 のプリプロセッサのソースコード読んで勉強したなあ。
- 762 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 07:11:36.94 ID:7MORbIbH.net]
- >>735
cflowの中でプリプロセスするから事前にする必要はないと思うけど
- 763 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 17:52:39.84 ID:aFd0yPA1.net]
- >>742
一部だけプリプロセスさせたいんです マクロとかはそのままの方がわかり易いので
- 764 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 18:14:45.54 ID:aFd0yPA1.net]
- 例えば
#define ERRLVL 5 #define WARLVL 3 とかなってるのをプリプロセスすると 数字に置き換わるので意味が判りにくくなる だけど#ifdefとかはプリプロセスしないと 例えば32ビット版の関数や構造体と 64ビット版の関数や構造体が重複してしまう
- 765 名前:デフォルトの名無しさん [2017/05/30(火) 04:54:25.56 ID:Al54U2am.net]
- CPAN に Text::CPP なんてのがある
- 766 名前:諱B
そのままではご要望どおりじゃないと思うけど参考にはなるかも。 [] - [ここ壊れてます]
- 767 名前:デフォルトの名無しさん [2017/05/30(火) 20:58:34.87 ID:Al54U2am.net]
- 言いたいことはよく解る。
とりあえず、プリプロセッサの通常の動作から変更したいのは ・C ソースの中のマクロ置換はしない ・#define ディレクティブは用済みになっていないのでそのまま出力する といったところ? もし Text::CPP の作者がそれを有意義だと思ってくれたら、 なんとかしてくれる可能性もなくはないかもしれないな。 連絡先は README に書いてあるよ。
- 768 名前:デフォルトの名無しさん [2017/05/30(火) 21:10:46.26 ID:Al54U2am.net]
- cpp をそのまま使うという方法もなくはないよ。
#define ディレクティブの前と C ソーステキストの前の行に #line ディレクティブを入れる。 cpp の処理結果には #line ディレクティブがあるから それを手がかりに元のファイルからコピーする。 この程度のことなら出来そうじゃない?
- 769 名前:726 [2017/06/01(木) 00:33:15.15 ID:mVcFCi6e.net]
- 作ってみたけどバグがあるだろう
https://github.com/bran1219/mycpp
- 770 名前:デフォルトの名無しさん [2017/06/04(日) 17:04:48.43 ID:JLuePf+9.net]
- あまり野暮なことはいいたくないけど、ファイルハンドルから行を読むんじゃなくて
トークンを読んだ方がシンプルに書けるんじゃないかな。そうすれば while(( my $tokentype,my $str) = gettoken( $fh)){ if ( $tokentype == 'comment'){ case_comment;} elsif ( $tokentype == 'string'){ case_string;} みたいなやり方が出来る。気を悪くしないでほしい。本当にそう思ったんだ。
- 771 名前:デフォルトの名無しさん [2017/06/05(月) 23:40:47.35 ID:AlRALdx8.net]
- gettoken()を作ってread()で一文字ずつ読み込んでトークンを返すのは良さそうだけど
トークンタイプはその時の状態が判らないと判別できないと思う //は普通の状態で現れたらコメント開始だけど "の中だと文字列 /*の中だとコメント文字列
- 772 名前:デフォルトの名無しさん [2017/06/09(金) 13:39:22.36 ID:jmjGKHXw.net]
- tcpのIO::Socket使ってサーバーに対してconnectした後、closeせずに親プロセスは接続を維持したまま、
forkした子プロセスでサーバーから受信した大量の文字列をファイルに書くとかするには子プロセスが継承したソケットをどう破棄したらいいの? 現状では当然の事ながら親プロセスの受信待ちが完全に止まってしまって困ってます
- 773 名前:デフォルトの名無しさん [2017/06/09(金) 14:33:09.33 ID:1EhRpyQk.net]
- なぜ子プロセスでコネクトしないの?
- 774 名前:デフォルトの名無しさん [2017/06/09(金) 14:41:19.37 ID:jmjGKHXw.net]
- >>752
客先のサーバーの仕様とやらで複数の接続(connect)に対応していない模様(爆)
- 775 名前:デフォルトの名無しさん [2017/06/09(金) 19:57:08.76 ID:ipZEdn/U.net]
- >>753
親プロセスの接続を切れば複数接続じゃなくなると思う
- 776 名前:742 mailto:sage [2017/06/10(土) 02:10:59.82 ID:6TQL4PKJ.net]
- 解決しました
fork()してから普通に子プロセス側で$socket->close();すれば良かったのですね。 ありがとうございました
- 777 名前:デフォルトの名無しさん mailto:sage [2017/06/13(火) 00:27:54.86 ID:5t+GNw1N.net]
- >>676,684-685
なぜこうなるの?
- 778 名前:デフォルトの名無しさん mailto:sage [2017/06/13(火) 02:06:41.19 ID:Z49xlslC.net]
- ヒント:
print"Hello world!\n"; print "Hello world!\n"; print("Hello world!\n"); print ( "Hello world!\n" );
- 779 名前:デフォルトの名無しさん mailto:sage [2017/06/13(火) 06:02:24.69 ID:TrwiR2C4.net]
- 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をプリントしてるだけ。
- 780 名前:デフォルトの名無しさん mailto:sage [2017/06/14(水) 00:2
]
- [ここ壊れてます]
- 781 名前:6:46.99 ID:J0vYxrWi.net mailto: >>758
なるほど、すっきりしたありがとう。 >>757 これは逆に何のヒントか分からなかった。 [] - [ここ壊れてます]
|
|