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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 16:01:21 BE:176880454-DIA(100004)]

"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
● 2008/04/20 現在の最新版: 5.10.0
● 2008/04/20 現在の開発版: 5.9.5

▼ 前スレ
Perlについての質問箱 34箱目
pc11.2ch.net/test/read.cgi/tech/1199977642/


421 名前:デフォルトの名無しさん [2008/06/09(月) 15:54:07 ]
ba5.txtには以下になってます。
4131048
4131053
x
x
4850328
x
x
x
x
3870357
3870369
x
x
4131038
4131045
x
x
x
この場合にxの行を一番最後の行の数値に置き換えたい場合
perlだとどのようにすればいいんでしょうか。
シェルでやろうとしたんですけどシェルだとちょっと難しいみたいなので
perlでやりたいと思ってます。誰かいいスクリプトを教えて下さい。
宜しくお願いします。

422 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 16:07:39 ]
>>420
use lib '.'やuse lib qw(.)を試してはいるんですが、>>419と同じエラーが出てしまいます。
また、use Curses;をuse ::Curses;として実行すると、>>419のCompilation failed in require at test.pl line 4.が消え、
Can't locate loadable object for module CursesもCan't locate /Curses.pmと表記が変わります。

423 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 16:51:43 ]
>>419
本当にCurcesモジュールをインストールしたのか?
Curses.pmをコピーしただけじゃないのか?




424 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 16:52:54 ]
>>417
ありがとうございます。

継承するときは、
use base qw(Hoge);
なんて書くんですね。

sub newってなんなんでしょう?
なんでそんな関数が必要なのですか?

425 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 16:55:17 ]
>>423
>コピーしただけ
はい。アクセス権の関係でインストールが出来ないので、
test.plと同じディレクトリにCurses.pmを配置し利用したいと思っています。

426 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 16:59:36 ]
>>425
だから、Cursesモジュールは、C言語で書かれたバイナリがメインで、
Curses.pmはそのインターフェイスでしかない。
ちゃんとコンパイルしてインストールしないとだめ。
エラーメッセージにある "loadable object" っていうのがそれ。

アクセス権の関係ってどういうこと? インストール過程で、
インストール先を指定できるぞ。
コンパイラも使えないのか?


427 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 17:00:37 ]
>>424
コンストラクタ

不精しないできちんとperltootを読め。
>>418

428 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 17:03:00 ]
>>421
聊かエスパーぎみにレス。↓こういう事がしたいのか?
$ perl -pe '$_=$t if/^x/; $t=$_' ba5.txt
4131048
4131053
4131053
4131053
4850328
4850328
4850328
4850328
4850328
3870357
3870369
3870369
3870369
4131038
4131045
4131045
4131045
4131045


429 名前:421 [2008/06/09(月) 17:16:09 ]
>>428さん
そのとおりです!
ありがとうございます!



430 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 17:17:17 ]
>>426
ありがとうございます。何か大きな勘違いをしていたようです。
Cの方でcurses/ncursesを使っていたので、システム上にcurses環境があると救いようの無いいい加減な誤認があり、
また、@INCサーチパス上にCurses.pmを置くことが出来ないのでアクセス権という的外れも甚だしい話をしてしまいました。
現在make中です。今のところエラーは吐いていません。

wget search.cpan.org/CPAN/authors/id/G/GI/GIRAFFED/Curses-1.23.tgz
tar xvf Curses-1.23.tgz
cd Curses-1.23
#Makefileの生成
perl Makefile.PL GEN PANELS MENUS FORMS
#コンパイル
make

431 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 17:28:19 ]
>>427
コンストラクタなんですか?

普通、コンストラクタは必要がある場合を除いて
書かないと思うのですが?

書かないとまずいですか?

432 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 18:16:16 ]
釣れますか?

433 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 18:24:44 ]
>>427
初心者には perltoot を読むのを薦めるよりも
perlboot を読むのを薦めた方が良いと思うよ
なんとなく読む気が無さそうな気配ではあるけども
5.8 なら以前どこかで perlboot の邦訳も見掛けたた気がするけど

434 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 19:43:23 ]
>>428
すげー。そういう意味だったのか。
そこまで読めなかったよ。

435 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 01:30:01 ]
5.005の頃、よくXS書いてたんだけど
その後、Perlはワンライナーでしか使わなくなってしまった。
その頃のXSの知識ってまだ使えるのかな。

436 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 03:06:37 ]
oshiete1.goo.ne.jp/qa4087225.html

437 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 04:02:57 ]
おや、なんだかどこかで見たような……。

438 名前:デフォルトの名無しさん [2008/06/10(火) 11:24:14 ]
マルチ死ねよwwwwwwwwww

439 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 12:02:49 ]
HTML::FillInForm を使用しているのですが、出力されるhtmlから
DOCTYPE 宣言が消えてしまいます。
対処法がありましたら教えて下さい。




440 名前:439 mailto:sage [2008/06/10(火) 13:58:23 ]
ここ(↓)を参考にして自己解決しました。
www.geocities.co.jp/SiliconValley-Sunnyvale/6128/perl/htmlpaser.html

use HTML::FillInForm;
use base qw(HTML::FillInForm);

sub comment {
my($self, $text) = @_;
$self->{output} .= "<!--$text-->";
}

sub declation {
my($self, $text) = @_;
$self->{output} .= "<!$text>";
}

441 名前:439 mailto:sage [2008/06/10(火) 14:05:33 ]
>>440
× sub declation {
○ sub declaration {

442 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 15:39:31 ]
ロード済みのサブルーチンと同じpackageかつ同じ名前のサブルーチンを含む外部plファイルを
requireすると、後の内容で上書きされてしまいますが、元のサブルーチンを壊さないですむ
方法はないでしょうか。

443 名前:デフォルトの名無しさん [2008/06/11(水) 18:07:18 ]

皆さん、エスパーでよろ。

意図した挙動にならず、どこが問題かのきっかけも掴めずにかなり時間をかけてしまったが、
ようやくやりたいこと出来た。が、どうにも腑に落ちない。
DB(mysql)からデータとってきて、Scraperに渡して・・・と、こんな感じで組んでいたんだけど、

レコード数は3とします。


パターン1------------------------------------

$rows = $sth->rows;
print "hajimari";

while(my $ref=$sth->fetchrow_hashref()){
$scraper->scrape($ref->{url});
print "roop dayo";
}

print "owari";

このような感じでやっていたんだが、ループが1回しか回らない!?なんで?
てなことで、webで情報あさったり、モジュールのソース眺めてもわからんし。



444 名前:デフォルトの名無しさん [2008/06/11(水) 18:07:56 ]

パターン2------------------------------------

$rows = $sth->rows;
print "hajimari";

while(my $ref=$sth->fetchrow_hashref()){
print "roop dayo";
}

print "owari";

と、Scraperになげなかったら、ちゃんと3回ループするんだよね。
でScraperでこけてんのかと思いきや、これも特に見当たんない。
問題なさそうだ・・・。


445 名前:デフォルトの名無しさん [2008/06/11(水) 18:08:25 ]

パターン3------------------------------------

$rows = $sth->rows;
print "hajimari";
$i = 0;

while(my $ref=$sth->fetchrow_hashref()){
$url[$z] = $ref->{url};
$i++;
}

for($z = 0;$z < $rows;$z++){
$scraper->scrape($url[$z]);
}

print "owari";

ちょいと思うところがあり、一旦配列にほりこんでみる・・・。
キター!!!3回まわったじゃんか!


ふむ、思うところというのは、Scraperでこけないでループ1週目は
ちゃんとループしているということ。
で、結局ちゃんとした原因が解ってないんだけど、メモリ制限とか
あるのかな?

アドバイス下さい。
(もしかしたら、CGIまわりの問題?)
OS:FreeBSD
Perl:5.8.3

446 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:44:14 ]
デバッグしろよ

447 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:47:02 ]
またきたのか

448 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:48:59 ]
Dump吐いてみたら?

449 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:52:18 ]
内部状態をインスペクトしたら



450 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:56:50 ]
printf だ! printf を挟め!

451 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:59:07 ]
if(!$hoge->{'hoged'}){
    $hoge->{'hoged'} = [];
}

push(@{$hoge->{'hoged'}}, $hoging);

これをスマートに書く方法ありませんか?
ちなみに$hogingは2箇所以上に書くなら一時変数必要です。

452 名前:デフォルトの名無しさん [2008/06/11(水) 19:04:06 ]
少し説明がヘタだとは思いますが以下の処理をしたいです。お願いします。
★処理の方法
行の先頭が [ の場合には、行の先頭が 20 の行の先頭にそれを加える
行の先頭が 空白の場合には一旦処理を終えて再度行の先頭の [ を読む
行の先頭に < がきた場合にはその処理を終えて再度行の先頭の [ を読む
結合した場合、その文字列の最後に必ず区切り文字としてタブを挟む
●処理前のabc.txt
<100100>
[1044]あいうえお
20321 1137 4850328 60
20321 1137 4850328 60
20321 1137 4850328 60
   【合計1044】
[1047]かきくけこ
20319 1090 3870357
20319 1101 3870369
   【合計1047】
[1051]さしすせそ
20328 1206 4131038 52
20328 1206 4131045 52
20328 1206 4131045 52
    【合計1047】    
    【累計】
<100200>
[1057]たちつてと
20328 1206 4131045 52
20328 1206 4131045 52 

453 名前:デフォルトの名無しさん [2008/06/11(水) 19:04:54 ]
●処理後のabc.txt
<100100>
[1044]あいうえお 20321 1137 4850328 60
[1044]あいうえお 20321 1137 4850328 60
[1044]あいうえお 20321 1137 4850328 60
   【合計1044】
[1047]かきくけこ 20319 1090 3870357
[1047]かきくけこ 20319 1101 3870369
   【合計1047】
[1051]さしすせそ 20328 1206 4131038 52
[1051]さしすせそ 20328 1206 4131045 52
[1051]さしすせそ 20328 1206 4131045 52
    【合計1047】    
    【累計】
<100200>
[1057]たちつてと 20328 1206 4131045 52
[1057]たちつてと 20328 1206 4131045 52

どうかよろしくお願いします。

454 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 19:15:23 ]
>>452
宿題を肩代わりするスレじゃないんだけど。
少しはperl文を書いてから出なおせ。

455 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 19:33:31 ]
たしかに最近どうみても入門者向けの課題を回答させようとする連中が多いような?


456 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 19:39:49 ]
>>451
push(@{$hoge->{'hoged'}}, $hoging);


457 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 19:55:00 ]
宿題を人に頼む奴は大学やめればいい

学部生いわく。

458 名前:443 [2008/06/11(水) 19:59:01 ]
>>446-450

おしかりありがとう御座います。
デバックの仕方を勉強します。
Data::Dumper
で一目瞭然でした。

猛省します。

原因はなんだったのかって?恥ずかしすぎて・・・。
言いたくないんですけど。

ループ内で。。。、DBハンドルが・・・。
ごめんなさいごめんなさいごめんなさい

猛省します。
大事なことなので2回言いました。


459 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 20:17:52 ]
>>456
ありがとう。解決した。



460 名前:454 [2008/06/12(木) 01:05:52 ]
>>454
すみません。bashで書いていたんですけどbashだとうまくいきそうにないので
perlでお願いしてみました。すみません。bashのコードとしては以下のような感じです。
無茶苦茶なコードですみません。

#!/bin/bash
for iii in `cat abc.txt`
jjj=`sed -n '2p'`
do
if test [ $jjj = "^20" ]
then
paste "$jjj" "\t" "$iii" > ccc.txt

else
fi
done

bashでは無理っぽいのでスクリプトも途中までの処理しかしてないです。
perlで処理すればと思ってお願いにきました。perlはあまりよくわからないのでお願いします


461 名前:452 [2008/06/12(木) 01:08:15 ]
寝ぼけてて名前間違えました。すみません。

462 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 01:36:40 ]
正直いうと、>>452に書いてある処理の一覧が全然論理的じゃないので俺には理解できない。

つまり、「一旦処理を終えて」と「その処理を終えて」がどう違うのかとか、
そもそも「その処理」や「その文字列」とは何なのかとか、
行の先頭が空白なのに行の先頭の[を読めとはどういうことなのかとか分からない。

463 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:15:05 ]
処理前と処理後を見ればやりたいことはわかるが、
この程度、forと正規表現使えばどうにでもできるだろ

あと、処理の方法はひどすぎる
自分でもう一回読んでみろ

464 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 06:43:04 ]
>>460
俺は、「perl文を書いてから出なおせ」と書いた。bashなんか求めてねえ
お前さんがperlで書く気0なのに答えてやる義理なんざねえよ
「perlの知識0です。エスパーしてください。」
って質問には>>428で答えてしまって反省してんだよ
>>436のリンク先でも読んでちったー自分で考えろ

465 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 09:42:25 ]
>>442

require するときに退避しといて戻せばいいんじゃない?

{
local *hoge::f;

require ...
}

これだと$hoge::fも影響受けるのがやりすぎだというなら、

{
local *hoge::f = sub{};

require ...
}


466 名前:デフォルトの名無しさん [2008/06/12(木) 11:03:25 ]
>>442
オブジェクト指向に設計すれば問題なす

467 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 11:08:45 ]
オブジェクト指向までやらなくてもせめてモジュールにして
Exporter使う方が楽だろうと思う。

読みたいファイルが他人が作ったもので中身も見たくない
のならしょうがないけどな。

468 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 11:20:59 ]
5.10にしたらsvkが動かなったんだけどsvk使ってる人はどうしてんの?

469 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 01:15:19 ]
require や do でベタの perl を呼ぶ時に引数与えたい場合どうするのが普通なんでしょか?

% ./hanage.pl -help

を do とかを通してやりたい時、というです。


@ARGV=("-help");  # とかしておいて、
do "hanage.pl";    # とすると、実現できているようですけど、これが普通でしょか?

また、ほかに方法があれば。



470 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:07:04 ]
それで動いてるならいいじゃないの?何が不満なの?

471 名前:469 mailto:sage [2008/06/13(金) 02:46:35 ]
ひとつは、自信がないから。
ひとつは、ほかのやり方を知りたいから。"There's more than one way to do it"

目から鱗、鼻から悪魔、みたいな記述が perl ならまだある筈だと。
自分の例だと面白くも何ともないのでねぇ。

472 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:34:01 ]
{
local @ARGV=("-help");
do "hanage.pl";
}
とかでいいだろ。べつに@ARGVじゃなくてもいいけど。

473 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:55:17 ]
…do EXPR は、goto文並みにobsoleteな感じがするんだが、皆さん使うの?
require EXPR ですら、perl4的でどうしても避けられない場合にのみ嫌々使うんだけど


474 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 08:10:51 ]
すみません。ものすごい基本的なこともか知れませんが質問させて下さい。
@listに複数行に,で区切られた5つのデータがあるとします。

my $cnt = 0;
foreach( @list){
@list2[$cnt] = split( /,/, $_);
$cnt++;
}

というのを考えたのですが、
Use of implicit split to @_ is deprecated
どのようにすればいいのでしょうか?

475 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 08:21:53 ]
>>474
@list2[$cnt] = @_ = split( /,/, $_);

476 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 08:22:41 ]
475は無し。何も考えずに書き込んだ。


477 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 08:54:07 ]
>>474
@{list2->[$cnt]}



478 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 08:58:33 ]
>>474
@{$list2[$cnt]}

479 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 09:27:49 ]
>>473

#--- config.file ---
my $dir = '/path/to/base/dir';
{
  foo => 1,
  bar => [ 2..5 ],
  baz => "$dir/extra.file",
};
#---

なんて設定ファイルを作って

$conf = do '/path/to/config.file';

で読むという手抜き実装はよくする。
設定ファイルを Perl で書けるのが柔軟で楽。



480 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 12:06:38 ]
>>473
useだとコンパイル時に読み込まれちゃうから
動的に読み込むファイル決める場合は
"use $file;"するかdo "$file"するくらいしかないじゃん
前者よりはdoのほうが素直じゃね?

481 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 12:21:25 ]
>>480
動的に use したいだけなら require の方がもっと素直だね。

482 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 12:34:19 ]
>>479,>>480
レスthx.

config file だったらYAMLとかそっち使っちゃってるw
480の方は状況があまり想像出来ん。Storable知る前だったら
Data::Dumperの出力云々で使ったかもしれんが…。

俺に機会が無いだけなのねw

483 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 12:38:20 ]
あ。ちなみにData::Dumperの動的処理の時も(しぶしぶ)require使ってた。
481氏の意見と同じ感覚。

484 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 13:34:15 ]
CSVファイルがありこれをソートしたいのですが、
3番目の要素でソートしたりできませんか?

485 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 13:38:49 ]
>>484
perlを使うよりsortコマンドのほうが早そうだけど?

486 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 13:41:01 ]
CSVの扱いはPerl向きじゃない気がする。

487 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 13:42:39 ]
>>486 CSV 何で処理してる?



488 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 14:09:47 ]
>>482 delegateパターン実装とか


489 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 14:27:27 ]
エクセルでやれば?w



490 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 14:29:25 ]
Pythonだとこんな感じ

import sys, csv
from itertools import imap
from operator import itemgetter

writer = csv.writer(sys.stdout)
for row in sorted(csv.reader(sys.stdin), key=itemgetter(2)):
    writer.writerow(row)


491 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 14:31:09 ]
ああimapとかimportする必要ねえな
無視して

492 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 14:31:49 ]
なんでもデリミタをコロンにしてたらUNIX病だと怒られた

493 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:02:19 ]
あれ?PerlにもCVS用のモジュールがあったような?

494 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:10:11 ]
そしてSJISでハマるに一票。pythonも同じと思うが。

495 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:31:56 ]
基本すぎてわらけるかもしれないけど、教えてください。

関数の引数の扱いがよくわかりません。
たとえば、
sub test{
# $_[0] == "test";
# $_[1] == "test2";
}
&test( "test", "test2");
となるとおもうのですが、
@test = ( "test", "test2");
&test( "test", @test);
としたばあい、引数はどうなるのでしょうか?

色々と試してみたのですが、
&test( @test);
としたばあいは、
@_ == @test;
だということはわかったのですが・・。
(もし違っていたら指摘していただけるとありがたいです。

496 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:35:18 ]
>>495 やって美奈代




497 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 17:04:22 ]
perl -F',' -lane 'push @dat, [ @F, $_] ;}{ print $_->[-1] for sort {$a->[2] <=> $b->[2]} @dat; ' FILE
sort -k3 -t, -n < FILE

498 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 18:04:30 ]
require がうまくできません。
上記の質問を参考に、
test.cgi ---
require './hoge.pl';
とかいて、
hoge.pl ---
our $test = "hogee";
1;
とかいているのですが、
perl test.cgi
すると、$testは読めていないようです。

ながに悪いでしょうか?

499 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 18:29:00 ]
>>495
マニュアルを見ずに仕様を突き止めるゲームでも開催されてるの?



500 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 18:36:22 ]
>>498
「$testは読めていないようです。」の「ようです」に隠された何か。

501 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 18:40:32 ]
>>492
そうなのか。不治の病にかかってしまった。


502 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 21:09:26 ]
myにすればいいんだよ

503 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 00:01:01 ]
>>474
splitをスカラコンテクストで使ってはいけない。

504 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 08:59:12 ]
$input = <>;
というコードをwindows上で実行し入力待ちの状態でウィンドウ右上の×印を
押すと「すぐに終了」のダイアログが出てきてしまいます。
入力待ちの状態では$SIG{'QUIT'}をキャッチすることが出来ません。
Term::ReadLine等も試しましたが挙動は同じでした。
入力待ちの状態でも正常終了するようにすることは出来ないでしょうか。

505 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 18:33:05 ]
Ctrl + C ??

506 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 00:06:19 ]
>>504
自前でwindow開かないと無理と思われ。

507 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 15:27:14 ]
多次元配列があるのですが、2次元目のある要素を元に1次元目をソートさせることはできませんか?

508 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 15:50:42 ]
>>507
出来るよ。

509 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 16:06:21 ]
すみません。
簡単なサンプルでいいんでコードを書いて頂けませんか?



510 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 16:17:38 ]
>>509
ググれば例などいくらでも出てくるんだが?
perl -MData::Dumper -le 'print Dumper sort { $a->[1] <=> $b->[1] } ( [2,3],[3,2] ) ;'
$VAR1 = [ 3, 2 ];
$VAR2 = [ 2, 3 ];




511 名前:デフォルトの名無しさん [2008/06/16(月) 08:14:00 ]
Perlでファイルの中の指定した文字列(正規表現".*hoge$"等)にマッチする行を
削除したいのですが、どうすれば良いでしょうか?

512 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 09:38:40 ]
>>511
perldoc.jp/docs/perl/5.10.0/perlfaq5.pod
を、「ファイルのある行を削除する」で検索。

513 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 09:39:22 ]
>>511

#!C:/perl/bin/perl

open(IN,"example.log");
while(<IN>){
if($_ =~ /hoge/){ $line .= "\n"; }
else{ $line .= "$_\n"; }
}
close(IN);

open(OUT,">exmple.cgi");
print OUT $line;
close(OUT);

print"Content-type:text/html\n\n";

print "消去完了";

みたいな感じですか?

Perlコーディング初心者質問スレ Part 57
pc11.2ch.net/test/read.cgi/php/1203935151/l50

514 名前:デフォルトの名無しさん [2008/06/16(月) 10:18:02 ]
111
222
333
444
555
666
というようなファイルがあったとして(数字は仮定です)3行目の行の
先頭にtabを2つ入れたい場合、どのようにすればいいのでしょうか。

515 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 10:24:45 ]
くだすれ池

516 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 10:28:50 ]
>>514
……
行数を数えながら一行ずつ読み込むループにして

if 3行目 then
先頭にtabを2つ入れる
読み込んだ行を出力する

という中身を回せばいいよ。

517 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 10:33:18 ]
>>514

質問先は「くだすれPerl(超初心者用)2」
pc11.2ch.net/test/read.cgi/php/1204488452/l50
が良いらしいです。


518 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 10:50:21 ]
>>511
>>513

すいません、間違ってました。
pc11.2ch.net/test/read.cgi/tech/1208674881/511

519 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 15:50:09 ]
変数の中の文字列の頭のスペースを取り除きたいのですが、
どのようなほうほうがありますか?



520 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 15:55:16 ]
>519
正規表現使う典型ケースです

521 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 16:00:36 ]
>>519
perldoc.jp/docs/perl/5.10.0/perlfaq4.pod
を、「文字列の先頭や末尾にある空白を剥ぎ取るには?」で検索。

522 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 16:01:41 ]
>>519
pc11.2ch.net/test/read.cgi/php/1204488452/292


523 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 16:08:16 ]
>>519
>>522

連投すいません。修正です。
pc11.2ch.net/test/read.cgi/php/1204488452/293

初歩質問はこちらが良いらしいです。
pc11.2ch.net/test/read.cgi/php/1204488452/l50


524 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 01:11:06 ]
質問です。
HTML数値エンティティを文字に変換する際にはどうすればよいでしょうか。
下記の通りに実行したのですがうまくいきません
(�-ÿしか対応していない?)

#!/usr/bin/perl
use HTML::Entities::Numbered;
$str='あいうえお';
print hex2name($str); #「あいうえお」を期待するが変換前と同じ$strが出力される

525 名前:524 mailto:sage [2008/06/18(水) 01:12:01 ]
$str='&#x3042;&#x3044;&#x3046;&#x3048;&#x304A;';

ですorz

526 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 04:57:49 ]
>>524
> print hex2name($str); #「あいうえお」を期待するが変換前と同じ$strが出力される

いや、期待するなよ。

527 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 06:29:13 ]
そのあたりに踏み入ったことはないのだが、マニュアルを見る限り

HTML::Entities::decode

を使うのではないか?

528 名前:デフォルトの名無しさん [2008/06/18(水) 12:04:39 ]
すんごい初歩的な質問で申し訳ないのですが、
Perlやってる友達がお前こんなのもできないだろと自慢してくるので、明日までにこれをやらないとまたバカにされるのですが、
プログラム自体やったことがなく意味不明すぎてよくわかりません。。誰かもしよかったら教えてください。

キーボードから整数値$aの値を入力してEnterを押し、
続けて$bの値を入力してEnterを押すと、
$aを 3 倍した値と、$bを 8 倍した値の和 を計算して$cに代入し,
$cの値を画面に出力するプログラム

結果は
print "$cn";
の形で出力する
この結果の出力以外の画面出力はしないこと.

529 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 12:10:09 ]
>>528
その友達に教えてもらいなさい



530 名前:デフォルトの名無しさん [2008/06/18(水) 12:14:12 ]
>529

というか、その友達から出された問題なんです。

531 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 12:23:42 ]
宿題だろ・・・

532 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 12:37:23 ]
それが出来たところで他の事聞かれてあぼんだな

533 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 12:40:17 ]
「1/10の確率」

を表現するのに、これ↓はありなのか?

return 0 if rand(1000) > 100;

534 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 12:51:55 ]
あり得ないという根拠は?

535 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 12:52:56 ]
>>533
randが正規乱数だと仮定するならありだろ。

536 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 13:05:29 ]
正規乱数だと仮定するならなしだろ
randが一様乱数を吐くのならありかもしれんが

537 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 13:50:36 ]
>>528
お前こんなのもできないのか

538 名前:デフォルトの名無しさん [2008/06/18(水) 14:25:04 ]
綺麗な記述を勉強したいです。
どっかで配布されてる非常に綺麗で整理された記述を教えてください。
あまりにいっぱい配布されすぎててチェックできません。


539 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 14:39:00 ]
>>538
man perlstyle
つーか、好きにしろ



540 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:10:12 ]
>>538
perl medicとかは偏ってはいるけど
ポリシーとしてはまあ参考になるかもしれん
買うまでの事は無い本なので図書館で探せ


541 名前:524 mailto:sage [2008/06/18(水) 21:54:54 ]
>>527
HTML::Entities::decode で無事に出来ました
今後はマニュアルをしっかり読みますm(_ _)m
ありがとうございました

542 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:32:54 ]
>>538
ここはPerlのスレですよ?

543 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:37:24 ]
>538
Plagger読んどけ

544 名前:デフォルトの名無しさん [2008/06/18(水) 23:17:04 ]
こっそり書いてみる。意味は教えないよ
perl -e 'print <STDIN>*3+<STDIN>*8,"\n"'

545 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:37:40 ]
$cに代入してないじゃん

546 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:54:10 ]
>>528

544とは別人だけど。

perl -e '$c=<>*8+<>*3;print"$c\n";'

また、次の問題を出されるだろうから、がんばって。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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