[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 04/04 01:09 / Filesize : 256 KB / Number-of Response : 807
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 03:03:00 ]
"The duct tape of the Internet" こと、Perl についての質問箱です。
"There's more than one way to do it" ということで、
Perl の奥深さについて皆で語り合い、追求してまいりましょう。

CGI についての質問は板違いです。WEB プログラミング板でどうぞ。
CGI と Perlの区別がつかない人も WEB プログラミング板に行ってください。
(WEB プログラミング板: pc11.2ch.net/php/)

CGI の質問は答えが Perl と全然関係ない話に帰着する場合が
多かったりするので WEB プログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。

www.perl.org/get.html
● 2009/08/07 現在の最新版: 5.10.0

▼ 前スレ
Perlについての質問箱 40箱目
pc12.2ch.net/test/read.cgi/tech/1243631674/

リンク集は >>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは >>5-6 あたり

577 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 18:11:57 ]
ディスパッチャーを自作すればいけるかー。evalでもいいけど

package UNIVERSAL;
sub dispatch_ancestor_method
{
  my ($self, $name, @args) = @_;
  no strict "refs";
  for my $super (@{(ref($self) || $self) ."\::ISA"}) {
    for my $ancestor (@{"$super\::ISA"})
      { return &{"$ancestor\::$name"}($self, @args) if defined &{"$ancestor\::$name"}; }
  }
  die "Undefined method `$name'";
}

package SubSub;
sub call_super_foo { shift->dispatch_ancestor_method("foo") }

578 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 18:22:06 ]
>>576-577
ありがとうございます。

単に勉強中の者でして、任意の上の階層のメソッドを呼び出す命令があるのかなーと
思ったしだいです。

579 名前:デフォルトの名無しさん [2009/09/24(木) 19:28:52 ]
>>578
そういう使い方では継承の意味がないのでは?

580 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 23:02:56 ]
>>579
深く突っ込まれても、まだ勉強の途中なのでよくわからんです。
SUPER::の項目を見てて、そういう命令があるのかなーと思っただけなんで。

581 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 01:37:51 ]
ちょっと聞きたい事があるんだ

配列のm番目にあるデータに、ループを回すごとに値を〜でくっつけて追加したいんだ
ex) m番目の値がabcで、cdeを追加したい場合 abc〜cde のように。

追加される値が$aの場合
$list[m] .= $list[m] . "〜" . $a; (※ 
として配列m番目の値を変えようと思ってやったんだけどうまくいかない。
mはずっと固定。

ループ1週目で$a・2週目で$b、3週目で$c・・・・・と後ろに繋げる場合
$list[m]〜$a〜$b〜$c〜 となっていくようにしたいんだけど
上の※式を実行すると
$list[m]
しか出力されなく困ってます。どなたか知恵を御貸しください……

582 名前:デフォルトの名無しさん [2009/09/25(金) 02:07:37 ]
>>581
$list[m] .= "〜" . $a; (※ 



$list[m] = $list[m] . "〜" . $a; (※ 


583 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 09:06:19 ]
念のために確認しておくが

× $list[m]
○ $list[$m]

というオチじゃないだろうな?

584 名前:570 mailto:sage [2009/09/25(金) 09:11:01 ]
あら、みんなシステムワイドで使ってるん?
ユーザーディレクトリで運用してる人は稀?

585 名前:デフォルトの名無しさん [2009/09/25(金) 09:28:16 ]
>>584
ローカルにtar.gzからlocal::libをインストールして、あとはその設定使ったcpanでインストールしてるけどそういう意味?



586 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 11:55:47 ]
変数名を動的に指定して、その変数の値をとってくることはできますか。
PHPでは
$x = 10;
$var = 'x';
echo $$var; // 10 が表示される
ということができるんですけど、Perlで同じことをするにはどうしたらいいですか。

587 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 11:56:24 ]
ユーザー権限でcpan shell使えば、ユーザーディレクトリにインストールされない?

588 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 11:59:10 ]
>>587
されるんだったらこのへんのブログ記事はみんな仕込みだな
ttp://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=makepl_arg&num=50

589 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 12:10:38 ]
>>586
同じく$$varでいいけど、そういうプログラムは行儀悪いからやめとけ。

590 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 12:19:44 ]
sage

591 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 12:24:12 ]
>>583 あー確かに$list[$m]になってましたね、申し訳ないです
$mは別の所で既に求めてあり、変わることのない定数ですが……

printで挿入動作のすぐ後で確認してみた時はうまく挿入されているのですが
次のループの時にはまた初期状態に戻ってしまっているようです……

592 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 12:25:21 ]
>>591
だったらループを晒さないと。

593 名前:587 mailto:sage [2009/09/25(金) 12:28:05 ]
>>588
うーん、一度
cpan> o conf init
で再設定してみては?

594 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 14:21:52 ]
>>592 すいません、ループ自体は他の動作も混ざってるので200行近くあるんです……

595 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 14:27:53 ]
>>594
ここに貼り付ければおk
codepad.org/



596 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 14:34:03 ]
>>591
だったら一行一行チェックしないと

597 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 15:31:30 ]
>>594
「他の動作」を削っていって、不具合の再現する最小ケースのコードを作ってみ。

598 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:19:27 ]
> printで挿入動作のすぐ後で確認してみた時はうまく挿入されているのですが
> 次のループの時にはまた初期状態に戻ってしまっているようです……

この人に足りないのは、「デバッグする」ということ。
いちおうすぐ後に print文を入れてみたのはエライが
その後で行き詰っているな。
もっと print を入れろ。たくさん入れろ。しつこいくらい入れろ。
print でコードがイッパイ埋め尽くされるまで入れろ!
そうすればどこで変になったか特定できるはずだろ。

599 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:25:19 ]
print でコードがオッパイ埋め尽くされるまで入れろ!だと!?

ってレスされることを狙ったよな?よな?

600 名前:デフォルトの名無しさん [2009/09/25(金) 18:32:10 ]
>>589
行儀よく

${$var}


あれリファレンスと同じだ

601 名前:デフォルトの名無しさん [2009/09/25(金) 18:35:37 ]
>>581
ループごとに変数初期化してる気配

602 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 19:32:41 ]
>>594
perl以前にそもそもな違和感を覚える。

200行ものループがあるのは、明らかにおかしい。
一関数でも200行はおかしい部類に入るのに、
それがループともなると、さらに話もデバッグも難しくなる。


603 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 02:12:34 ]
perl ならループの中身が200行くらいあっても不思議じゃないだろ

604 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 02:29:33 ]
絶対にbetter wayが存在するだろ

605 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 03:03:05 ]
>>603
不思議じゃないが、おかしい。
「perlなら」とか言い訳してる場合じゃなくおかしいものはおかしい。直すべき。



606 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 11:33:59 ]
プログラミングする目的は綺麗なコードを書く事じゃないし
行儀のいいコードを書く必要性は場合よる

LLであるPerlならそういうケースに見回れる可能性は低いから
むしろ「おかしい」って突っ込みの方が自分本位で正当性に欠ける気がするんだよ!

607 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 12:11:35 ]
プログラムは本来動けばいい物でしょ

そこに、保守性、生産性という需要があれば可読性のあるソースを
速度やコンパクトさを求めるなら、可読性や保守性は両立できない

だからそもそもソースの書き方に正しいとか間違いなんて言うのは野暮

608 名前:デフォルトの名無しさん [2009/09/26(土) 12:37:30 ]
>>607
些細なバグを直しやすくするアドバイスが
そんなに気に入らないか?

下手くそな書き方で無駄な時間潰すより
素直に耳を傾けたほうがよほどいいと思うが?

609 名前:デフォルトの名無しさん [2009/09/26(土) 12:47:48 ]
「速くする前に、まず正しくしよう」

「だめなプログラムを修正するのはやめて、全部書き直そう」

610 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 12:48:08 ]
>>607
Damian Conwayを真っ向から否定ですね、わかります

611 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 12:48:12 ]
>>606 >>607
はぁ?
そんなの綺麗で可読性のあるコードを書かない言い訳になんかならんよ。
実際「動けば良い」じゃ済まないから現に >>581 みたいな質問が出てるんじゃんよ。
「おかしい」ったら「おかしい」んだよ。

612 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 12:59:02 ]
>>606-607
思考が若いねぇ。いったい何処で習った手法なのかなー? 趣味のプログラム書き殴りだけで、
それなりの規模の保守運用を伴う実務経験無さそうだねぇ

613 名前:デフォルトの名無しさん [2009/09/26(土) 13:00:50 ]
プログラミングの鉄則


1 動くこと
2 正しく動くこと
3 上記を満たすためにわかりやすく書くこと



614 名前:607 mailto:sage [2009/09/26(土) 13:06:36 ]
一応SEだからソース管理するスタンスで言えば
綺麗で可読性のあるコードを書くのは反対しないよ

だがここはあくまで書き方の自由度の高いPerlのスレであり
大規模プロジェクトで生産性、保守性を目的にしたソースを第一とするとはどこにも書いていないと言いたいだけ

615 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 13:10:05 ]
そうかそうか



616 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 13:10:39 ]
>>607 の理論は正しくないと思うけど
>>608
この問題に対する、「分割や抽象化されてない巨大なコードはバグりやすいよ」ってアドバイスならいいけど、
>200行ものループがあるのは、明らかにおかしい
みたいに、プログラミング一般に適用可能な意見とするのは違うなーと思った
こういう考えをむやみに初心者に植え付けるのは、コーディングオナニーの原因にもなるしね
常に必要なことではない、ってことを理解してもらうために発言したんだよ

617 名前:607 mailto:sage [2009/09/26(土) 13:12:57 ]
>>612
習うと言われても
私の若い頃は工業高校なんかでBASICかFORTRAN、アセンブラしか教えられていなかったから
実務経験で培った知識しか無い
これ以上はスレ違いだし606を擁護するのはやめとく

618 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 13:35:06 ]
> みたいに、プログラミング一般に適用可能な意見とするのは違うなーと思った
> こういう考えをむやみに初心者に植え付けるのは、コーディングオナニーの原因にもなるしね
いいや、プログラミング一般に適用可能だし、むやみに初心者に植え付けるべき考えだよ。
ところで「コーディングオナニー」って何?

特に >>581 の場合なんかは、どうせスコープを見誤ってバグってるんだろうから、
効率とか云々は一旦棚に上げて、 use strict; use warnings; した上で、
200行のコードをどんどん関数に分割していけば、まずいところはすぐ見つかると思う。

619 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 13:45:27 ]
保守性も、動くこと優先も、両方考慮すべきことだよ

多人数開発だったり、サポート期間の長いソフトだと前者の重要性が
高くなるだけで、別にそれが全てじゃない。

Perl の場合、たいてい動けばよいの方の比重が高くなると思うな
まあ、どうでもいいけど

620 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 13:49:02 ]
200行のループしかないプログラムだったり

621 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 14:11:14 ]
>>618
>コーディングオナニー
ああ、リアルで使っても結構通じちゃうから、同じ気持ちで使ってたよ。気付かなくてごめんね

意味だけど、本来の目的や本質は疎かにして、自分が正しいと信じてることを機械的に行うことだよ
病的なまでにコードを整理したり、やたらリファクタリングに時間をかける人がいるんだよ。文脈におけるメリットも考慮せずに
(実を言うと、昔は自分もそうだったしね)

コードを整理することが保守性やメンテナンス性を高めることに繋がるという事に異議は無いよ
ただ、そういうことが常に求められているわけではないので、
その手段である「綺麗なコードを書くこと」は、プログラミング一般に適用出来ない。そういうこと

>>619
同意

622 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 14:13:57 ]
s/機械的/盲目的/

623 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 15:08:40 ]
200行もあるコードにおかしさを嗅ぎつけるってのは
プログラマにとって身に付けるべき重要な嗅覚だろ。
そんな嗅覚の未発達な初心者に対しては、
ちゃんとこれはおかしいと諭してあげるべきじゃないのか。

200行もあるが故に見通しが悪く自力で問題解決できなくなり、
200行もあるが故にコード片を晒すこともできずこれ以上の助言ももらえない、
そんなにっちもさっちもいかなくなった質問者に対して、
200行のコードでも動けば問題ない、ってのがアドバイスになるのか?おかしいだろ。

624 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 15:13:44 ]
やってればセンスある奴は早い時期に勝手に気づくさ。
気づかないのはセンスナッシングで他のことにも気づかないってことで

625 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 15:50:33 ]
よそでやれ



626 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 15:57:03 ]
いや、ここでやる(`・ω・´)

627 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 15:58:19 ]
ハゲ・ズラ板でやれ

628 名前: ◆TWARamEjuA mailto:sage [2009/09/26(土) 16:18:45 BE:1634235-BRZ(10101)]
つ 夢・独り言@2ch掲示板 changi.2ch.net/yume/

629 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 16:24:52 ]
>>628
行ってらっしゃーい

630 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 18:08:27 ]
> 綺麗で可読性のあるコード

これを言い出すとモメる原因になる。
いったい<誰>にとって綺麗で可読性のあるコードであるか。
おまえか?おれか?
主観を押し付けるなよ。

631 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 18:26:43 ]
>>630
そんな中二病丸出しの発言する奴は無視するだけでしょ。

632 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:49:32 ]
「綺麗さ」に関して標準の測定法が無いから、主観の問題になる。
というか、ズルや政治的意図で歪められたりする。

perltidyなどのフォーマッタを通したコードが綺麗で良いとすると、
複雑さなどは計算に入れないのか、などなど。
一度は通っておくといい道。

633 名前:デフォルトの名無しさん [2009/09/26(土) 21:16:08 ]
mecabについての質問です。

文字列をmecabに入れる際にeuc-jpにエンコードし、名詞だけを抽出し
デコードしてブラウザに出力させようとすると、大半は通常通りに取得できますが、一部の単語が文字化けします。
調べてみたら漢字に限らず、ひらがな・カナ文字でも文字化けしています。

考えられる原因はなんでしょうか?OSはfedora9です。

634 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 21:49:44 ]
ここでやる(`・ω・´)

(´;ω;`)ブワッ

635 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 22:12:43 ]
(´;ω;`;:..

(´;ω;;:;:::...

(´;;:;::;..



636 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 22:14:07 ]
(´;;:;::;..

(´ ∀;;:;:::...

(´ ∀`)

637 名前:デフォルトの名無しさん [2009/09/27(日) 00:08:32 ]
PERLでのImage Magickの使い方について教えてください

画像ファイルを読み込んだあと、画像のプロパティ(タイトル、標題、コメントなど)を
セットしてから出力することはできるでしょうか。

638 名前:デフォルトの名無しさん [2009/09/27(日) 01:43:41 ]
>>637
もちろんです。

man Imagemagick

639 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 05:53:38 ]
(´・ω・`) 。。゚o。○

(´・ω 。o。゚。o○

。。o。o゚O゚。o゚o○。o゚

640 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 08:07:26 ]
2chにコードを貼り付けるとき、インデントを全角スペースにしたりしますよね。
みなさんはそれをどのように変換してますか?

エディタの機能でうまくできるものなのでしょうか?

641 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 09:25:39 ]
s/\t/  /g;

642 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 09:57:50 ]
>>641
それじゃダメだろ

643 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 11:16:51 ]
>>640
Perlで「各行の先頭から続く複数の空白を、同じ数の に変換して出力する」コードを書けば良いじゃない


644 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 11:18:24 ]
あれ?表示が変だな
あんど、えぬ、びー、えす、ぴー、せみころんね

645 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 11:29:21 ]
 



646 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 11:41:45 ]
すべてのスペースを に変換すっと、今度は文字数制限にひっかかっかるやもやがな
s/(?<=^|\G)[ \t]/&nbsp;/mgx

647 名前:デフォルトの名無しさん [2009/09/27(日) 11:49:50 ]
どうでもいい議論が続いてるな。エディタで置換すればいいだろ
>>641でいいと思うけど。
いつも半角スペース2個を全角1個にしてるからvimなら%s/ / /gcで置換できる

648 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 12:19:15 ]
641じゃデコボコになるだろ・・

649 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 12:28:43 ]
>>641
今どきハードタブ使ってるひとはあまりいないんじゃない?

650 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:04:24 ]
Damian Conway先生に怒られるしね

651 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:11:40 ]
>>649
あなた、井の中の蛙さん?

652 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:49:34 ]
そうだけど何か? ゜_゜

653 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 16:07:09 ]
かわいそうに

654 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 17:07:39 ]
>>653なんか、ダッシュ村のため池の蛙なんだぜ。



655 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 19:30:25 ]
来月にリャマ本の日本語第5版くるんだね
中身結構かわってるかなあ



656 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 22:27:04 ]
>>646
コード載せた場合、先に引っかかるのは
大概行数制限のほうだと思う

657 名前:デフォルトの名無しさん [2009/09/28(月) 21:50:38 ]
さがってる

658 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 23:07:51 ]
下がってても落ちないよ

659 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 00:14:06 ]
s!>(back|return)<!>戻る<!si;

これやるとエラーダイアログが出るんです。

問題が発生したため、Perl Command Line Interpreter を終了します。 ご不便を
おかけして申し訳ありません。
この問題を Microsoft に報告してください。
(以下省略)
          [エラーを報告する(S)] [送信しない(D)]

いろいろ試したらこのような結果でした。
o Active Perl 5.8.8
o Active Perl 5.8.9
o Active Perl 5.10.0
x Active Perl 5.10.1

こんなふうに ( | ) を使わなければOKなんですが、ちょっと困ります。
s!>back<!>戻る<!si;
s!>return<!>戻る<!si;

perl 5.10.1 はウンコですか?

660 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 12:42:56 ]
>>659
デリミタは#とか括弧類にしてくれ。

あとPerlのせいにすんな。

FreeBSDやLinuxの5.10.1ではそのコードは普通に動くから、
5.10.1がウンコなんじゃなくてActivePerlが正規表現モジュールか何かの
Winへの移植に失敗してるんだろ。
5.10.1リリース後一ヶ月以内のスピード移植版に文句言うとか何様かと。
修正リリースが出るだろうからバグ報告でもして座って待ってろ。

661 名前:デフォルトの名無しさん [2009/09/30(水) 13:48:36 ]
=~で全角数字だけの文字列だったらを取り除くにはどうすれば良いのでしょうか?
ttp://ash.jp/code/unitbl21.htmを参考にしようと思ったのですが、どう書けばよいか分かりません。
お願いします。

662 名前:661 mailto:sage [2009/09/30(水) 13:50:08 ]
使用している文字コードはutf-8です。

663 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 13:58:29 ]
s/[0123456789]//g
みたいな?

664 名前:デフォルトの名無しさん [2009/09/30(水) 15:40:47 ]
>>661
s/^[0-9]+$//


665 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 17:38:18 ]
>>659
んー、WindowsXPで普通に動く。



666 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 19:58:03 ]
XSを勉強中です。
長さを指定して文字列を作成し、あとから文字を詰め込みたいのですが、やり方がわかりません。
自分で試したのはこんなコードです。

SV *
hoge()
CODE:
SV *string = newSV(5);
char *s = SvPVX(string);
//int len;
//char *s = SvPV_force(string, len);
int i;
for (i = 0; i < 5; i++) {
s[i] = 'x';
}
s[i] = '¥0';
RETVAL = string;
OUTPUT:
RETVAL

これを呼び出してみると、長さが0の文字列が返されるだけでした。
おしえてえらいひと。


667 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 19:59:37 ]
失敗した。インデントを全角空白にしました。

SV *
hoge()
  CODE:
    SV *string = newSV(5);
    char *s = SvPVX(string);
//int len;
    //char *s = SvPV_force(string, len);
    int i;
    for (i = 0; i < 5; i++) {
      s[i] = 'x';
    }
    s[i] = '¥0';
    RETVAL = string;
  OUTPUT:
    RETVAL

よろしくお願いします。

668 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 20:03:39 ]
なんかC++みたいだな


669 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 07:53:07 ]
>>668
XSが何か分かってないだろ。
ちゃんとPerlの質問だ。

質問にも答えたいが朝食を作らないと。

670 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 09:24:05 ]
>>667
SvPOK_onlyかSvPOK_only_UTF8が必要なんじゃね?

671 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 09:26:25 ]
>>666
あーちなみに文字列の突っ込み方は合ってるし、
そっち方面の質問がメインならC/C++のスレに行きな。ちなみに勘だが、

SV *
hoge()

ここがおかしいんじゃないか?SV *返すことってできたっけ?
インクルードファイルやMODULE行がないのは端折ってるだけだよな?

672 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 09:32:21 ]
5バイトしか取ってないのにNULLを6バイト目に入れてるけどいいの?

673 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 09:32:52 ]
あ、いいのか。

674 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 09:33:11 ]
>>672
6バイト取ってるでしょ。マニュアル嫁

675 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 09:34:07 ]
先越されるとは思わんかった。>>673>>671へだ。SV *自体問題ない。



676 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 09:46:21 ]
newSVpvと文字列コピーするところ以外は
やりたいことは一緒なんだから比べてみ。

677 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 10:10:11 ]
SVの実体が何か明示する前に文字列と決め付けてるからまずいんじゃないか。
いきなりnewSVみたいな低レベルの関数使うと怪我をするよ。
SV *string = newSVpv(" ", 5);としたらどうなる?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<256KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef