Perlについての質問箱 43箱目at TECH
Perlについての質問箱 43箱目 - 暇つぶし2ch373:デフォルトの名無しさん
10/05/17 22:55:18
cpan> install XML::Atom
*********いろいろ展開されて

Please download the file manually, save it to a directory in %PATH% (e.g.
C:\WINDOWS\COMMAND\), then launch the MS-DOS command line shell, "cd" to
that directory, and run "Nmake15.exe" from there; that will create the
'nmake.exe' file needed by this module.

You may then resume the installation process described in README.

-------------------------------------------------------------------------------
Warning: No success on command[C:\Perl\bin\perl.exe Makefile.PL INSTALLDIRS=site]
MIYAGAWA/XML-Atom-0.37.tar.gz
C:\Perl\bin\perl.exe Makefile.PL INSTALLDIRS=site -- NOT OK
Running make test
Make had some problems, won't test
Running make install
Make had some problems, won't install
Failed during this command:
MIYAGAWA/XML-Atom-0.37.tar.gz : writemakefile NO 'C:\Perl\bin\perl.exe Makefile.PL INSTALLDIRS=site' ret
urned status 512

cpan>
と表示されてしまいました。とりあえず、nmake.exe はダウンロードしました。
これからどうすればいいでしょうか?

374:デフォルトの名無しさん
10/05/18 00:12:07
>>373
今使ってるperlをアンインストールしてActivePerlの最新版をインストールし、PPMを使え

375:デフォルトの名無しさん
10/05/18 00:23:08
うちcpanが成功した試しがないわ
ppmならokだけど

376:デフォルトの名無しさん
10/05/18 05:28:00
XS系はことごとく失敗する気がする…
特にXMLやHTMLのパーサー関連は入らん at Ubuntu

377:デフォルトの名無しさん
10/05/18 06:13:44
まさかbuild-essential入れてないとかじゃないよな

378:デフォルトの名無しさん
10/05/18 06:45:12
XML-Atomはppmに無いからめんどくさいんだよな
だから俺は使ってない
あとこいつマルチだな

379:デフォルトの名無しさん
10/05/18 08:46:53
今ならStrawberry Perl入れた方が楽じゃない?
XML::Atomもすんなり入ったよ

380:デフォルトの名無しさん
10/05/18 08:55:06
そもそもwindows系OSでperl使うのがすでに茨の道とも言える

381:デフォルトの名無しさん
10/05/18 10:03:01
なんで?

382:デフォルトの名無しさん
10/05/18 11:48:53
>>378
リポジトリにこれ加えとけ。
URLリンク(trouchelle.com)

383:デフォルトの名無しさん
10/05/18 12:20:10
elseifでなく何故elsifなんですか?

384:デフォルトの名無しさん
10/05/18 13:26:56
母音が続くのが気持ち悪いから

elifじゃないのと聞かれたら解答に窮するが、CPPはelifなんだよな
文化によって多少違いはあるが、やはり、母音が続くのが気持ち悪いんだと思う

385:デフォルトの名無しさん
10/05/18 13:55:38
いっそのことelfでいいじゃん。
短いし。

386:デフォルトの名無しさん
10/05/18 15:33:01
最近プログラミングの勉強を始めました

print "hello world";

と書いてhello.plで保存し、ターミナルで

perl hello.pl

と入力するのはわかったんですが、hello.plはどこに保存すればいいのですか?
環境はMac OS Xです

387:デフォルトの名無しさん
10/05/18 16:10:27
>>386
好きな場所

388:デフォルトの名無しさん
10/05/18 16:28:15
>>386
今自分がいる場所におけばいい
違う場所に置きたいならフルパスで指定すれば実行できる

389:デフォルトの名無しさん
10/05/18 16:41:23
>>382
サンクス
つか、ppmguiにリポジトリのサジェストなんてあったんだな
そこにも載ってたわ
重ねてサンクス

390:デフォルトの名無しさん
10/05/18 17:56:24
>>386
perlの前にターミナルの使い方を覚えるためのBash入門を読んだ方が良いかも。

391:デフォルトの名無しさん
10/05/18 18:42:40
それは的外れなアドバイス

392:373
10/05/18 21:37:27
ATOM::XML をWinXP/Active Perl に入れたい
なにかヒントありますか?
>>374
>>375
>>379
ストロベリー入れましたけど、Activeパールと同じエラーです。
(nmake をダウンロードして、ダウンしたパッケージをmake して、
それから、再度ACTIVE Perl で,ATOM::XMLしたときとです。
やはり、パッケージが問題なのかな?
cpan> install ATOM::XML
Fetching with LWP:
URLリンク(cpan.strawberryperl.com)
Fetching with LWP:
URLリンク(cpan.strawberryperl.com)
Fetching with LWP:
URLリンク(cpan.strawberryperl.com)
Creating database file ...

Gathering information from index files ...
Populating database tables ...
Done!
Warning: Cannot install ATOM::XML, don't kn
Try the command

i /ATOM::XML/

to find objects with matching identifiers.

393:デフォルトの名無しさん
10/05/18 21:44:02
現在 WinXP上にActivePerlが入っています。StrawberrryPerlを入れて共存できるのでしょうか?

394:デフォルトの名無しさん
10/05/18 21:49:59
エラーメッセージくらい読めよ

395:デフォルトの名無しさん
10/05/18 21:52:02
普通に考えるとパッケージ名ってAtom::XMLもしくはXML::Atomだからでは

396:373
10/05/18 21:57:06
とりあえず、
install XML::Atom::Feed
とすると、したみたいになった。これってATOM::XML ってインストールできたのかな
Prepending C:\strawberry\cpan\build\XML-Atom-0.37-H4btN8/blib/arch C:\strawberry
\cpan\build\XML-Atom-0.37-H4btN8/blib/lib to PERL5LIB for 'install'
Installing C:\strawberry\perl\site\lib\XML\Atom.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Base.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Category.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Client.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Content.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Entry.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\ErrorHandler.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Feed.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Link.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Person.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Server.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Thing.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Util.pm
Appending installation info to C:\strawberry\perl\lib/perllocal.pod
MIYAGAWA/XML-Atom-0.37.tar.gz
C:\strawberry\c\bin\dmake.EXE install UNINST=1 -- OK
cpan>


397:デフォルトの名無しさん
10/05/18 22:13:16
perlで添付ファイル取得して、それをopencvに渡して結果を保存したいんだが、出来ない。
ローカルでemlファイル読み込ませるといけるのに、メール受信をトリガに起動するとだめだ・・。
どうして?

398:デフォルトの名無しさん
10/05/18 22:32:58
>>396
OKってかいてありますやん

心配なら
$ perldoc XML::Atom

399:デフォルトの名無しさん
10/05/18 22:34:23
>>396
XML::Atom と ATOM::XML は全く別のモジュールだ。
(存在すればの話しだが)
お前さんが、いくら XML::Atom を入れたとしても、
ATOM::XML は永久に入らん。


気持悪いったらありゃしない。

400:デフォルトの名無しさん
10/05/19 12:22:56
アハハハ

401:デフォルトの名無しさん
10/05/19 14:46:33
たとえば、[[:ascii:]]から'<'を除いた文字クラスを表わすにはどうしたらいいでしょうか?

402:デフォルトの名無しさん
10/05/19 18:51:09
もともと入ってないやん

403:デフォルトの名無しさん
10/05/21 21:53:00
数百のファイルを処理するPerlスクリプトがありまして、それがシーケンシャルに処理してて
クソ時間がかかるため、マルチスレッドでやらせようとPerlについて勉強しています。
で、いまんとこ、セマフォで並列処理数を制御し、joinするためだけのスレッドを動かして
かたっぱしからjoinするようにしています。おかげで処理時間は半分以下になったのですが、
これを添削していただけないでしょうか。もっとエレガントなやり方があれば教えていただきたいです。
よろしくおねがいします。

#!/usr/bin/perl
use strict;
use File::Basename;
use File::Path;
use threads;
use threads::shared;
use Thread::Semaphore;

use Codemap;
use SVG;

my $concurrency = 5;
my $semaphore = Thread::Semaphore->new($concurrency);
my $exitflag :shared = 0;
my $jointhreads = threads->new(\&joinThreads);

while (@ARGV) {
my $orig_svg = shift(@ARGV);
$semaphore->down;
threads->new(\&doSplit, $semaphore, $orig_svg);
}
$exitflag = 1;
$jointhreads->join;
exit 0;


404:403のつづき
10/05/21 21:53:56

sub joinThreads {
until ($exitflag) {
foreach my $thr (threads->list) {
if ($thr->tid and !threads::equal($thr, threads->self)) {
$thr->join;
}
}
print "\nThreads joined.\n";
}
}

sub doSplit {
my $semaphore = shift;
my $orig_svg = shift;

my $svg = new SVG($orig_svg);
$svg->setdumpdir("work.d");
if ($svg->modtime() > $svg->splittime()) {
$svg->dump();
print STDERR " $svg->{filename} : splitted\n"
} else {
print STDERR " $svg->{filename} : SKIP\n"
}
$semaphore->up;
}


405:デフォルトの名無しさん
10/05/22 14:07:11
UTF8の~をshift_jis(cp932)に変換して出力するとエラーが出てしまいます。
解決策があれば教えていただきたいです。
環境はWindows 7 64bitとActivePerl v5.10.1 64bitです。

use utf8;
binmode STDOUT, ":encoding(cp932)";
print "昨日は10時~6時まで寝た。\n";

D:\>test.pl
"\x{301c}" does not map to cp932 at D:\test.pl line 3.
昨日は10時\x{301c}6時まで寝た。

406:デフォルトの名無しさん
10/05/22 14:20:39
D:\>test.pl

何故こんなところで作業しているのか

407:デフォルトの名無しさん
10/05/22 14:54:09
「~」には
FULLWIDTH TILDE (FF5E)
WAVE DASH (301C)
の二種類がある。

408:デフォルトの名無しさん
10/05/22 14:57:40
~の厄介さはMacを使ってるとよく分かる

409:デフォルトの名無しさん
10/05/22 16:10:32
macでなくても~は厄介

410:デフォルトの名無しさん
10/05/22 16:13:53
Macだとプログラムとか使わなくても
普段から~が厄介になる

411:デフォルトの名無しさん
10/05/22 16:15:49
え?

俺は生粋のマカーだけど、厄介さが全然分からん。
何かトラブるっけ? "~"って。
Mac<=>Winのデータ交換とかの話し?


412:デフォルトの名無しさん
10/05/22 16:21:41
Macで~と書き込んだら
Winだと逆向きの波線に見えたり
最近は大丈夫な気はするが

413:デフォルトの名無しさん
10/05/22 16:31:53
~が厄介なんて、OS9時代の話だろ。
昔から機種依存文字問題とか、今はUTF8-macとUTF-8とか
もっと厄介なモンがあるから。


414:デフォルトの名無しさん
10/05/22 16:54:16
OSXでの話だが

415:405
10/05/22 17:06:03
皆さんレスありがとうございます。

>>405はmeadowから打ち込んだ~は\x{301c}となり、
notepad等から打ち込んだ~は\x{ff5e}になる事が原因で表示に失敗していました。
\x{301c}はshift_jisでは表示に成功しcp932では失敗しました。
\x{ff5e}はcp932では表示に成功しshift_jisでは失敗しました。

どうやらeucとsjisの~はutf8の\x{301c}に対応していて
cp932の~はutf8の\x{ff5e}に対応しているようでした。
なので例えばeucの~をutf8に変換し、それをcp932に変換すると失敗するようです。

挙動がおかしいと思った元のプログラムではネット上にあるeucのページを取ってきて
utf8に変換し出力時にcp932に変換していたので上記の理由で文字化けしていた様です。
そこでeucをutf8に変換した際に\x{301c}を\x{ff5e}に変換するようにしました。
$utf8data =~ tr/\x{301c}/\x{ff5e}/;
そうしたところprintした際に"\x{301c}" does not map to cp932というエラーも出ず、無事~が表示されるようになりました。

416:デフォルトの名無しさん
10/05/22 17:10:30
意味不明

417:デフォルトの名無しさん
10/05/22 19:23:59
>>405
use utf8は「フツーは使うな」とCPANに書いてあった気がする。
Windowsを呪いながらEncode使え。

#!perl
use Encode;

my $msg = "昨日は10時~6時まで寝た。\n";
Encode::from_to($msg, 'utf8', 'cp932');

print $msg;

418:デフォルトの名無しさん
10/05/22 19:39:43
>use utf8は「フツーは使うな」
理由は?

419:デフォルトの名無しさん
10/05/22 20:34:20
>>417
>use utf8は「フツーは使うな」とCPANに書いてあった気がする。
どこに書いてあったの?聞いたことない

420:デフォルトの名無しさん
10/05/22 21:01:51
> Do not use this pragma for anything else than telling Perl that your script is written in UTF-8.
もしかしてこれの事か?

421:デフォルトの名無しさん
10/05/22 21:08:00
>>417
そのEncodeの作者が
>スクリプトはUTF-8で書き、use utf8;するのがモダンPerlのあり方です。
って言ってるけどな。
URLリンク(blog.livedoor.jp)

422:デフォルトの名無しさん
10/05/22 22:19:22
文字列の切り取りに関して質問があります。
$a="aho";
$b="baka";
$str="ahomanukebaka";
$strには$aと$bで"manuke"という文字が挟まれています。
このとき$strからmanukeだけを切り抜くにはどうすればよいでしょうか?

423:デフォルトの名無しさん
10/05/22 22:24:54
 substr($str, length($a), length($str)-length($a.$b));

424:デフォルトの名無しさん
10/05/22 22:48:06
>>422
my $a1 = "aho";
my $b1 = "baka";
my $str = "ahomanukebaka";

$str =~ s/$a1(.*)$b1/$a1$b1/;

warn $str; # ahobaka
warn $1; # manuke

425:デフォルトの名無しさん
10/05/22 23:01:54
失敗してるのに前の$1を読んでしまう

426:デフォルトの名無しさん
10/05/22 23:16:31
>>425
あぁ、ごめん。本当はifとかやるけどmanukeが必要なのかどうなのかわからなくて
とりあえず$1に入ってるよって言いたかった

427:デフォルトの名無しさん
10/05/22 23:22:02
>>424
できましたありがとうございます!

428:417
10/05/23 01:13:47
>>420
それだ。
WWW::Mechanizeでcp932受け付けんからEncode::decode_utf8($massage)とかやってたのに、
use utf8だけで済んだのか・・・・クソアホみたいだわorz


429:デフォルトの名無しさん
10/05/23 13:00:16
正規表現のグルーピングについて質問です
繰り返し表れる対象をグループ化したいのですが良いやり方ありますか?
gオプション付けたら行けるかと思ったらダメだった。

my $str = << 'END';
aba

aca

ada

END

$str =~ m{(a[^a]a)\n\n}g; # これだと初めの対象にしかマッチしない

430:デフォルトの名無しさん
10/05/23 13:23:18
>>429
g(global?)オプションだけでなく
m(multi line?)オプションもいるんじゃなかったっけ

431:デフォルトの名無しさん
10/05/23 13:27:20
>>429
こう?

my @matches = $str =~ m{(a[^a]a)\n\n}g;

432:デフォルトの名無しさん
10/05/23 13:32:54
>>430
$str =~ m{(a[^a]a)\n\n}mg;
これも試したけどダメだったんだよね

>>431
おぉ。いけました。
ちなみに=と=~を一緒に書くとわかりにくいので別にする方法ってありますか?
普通のマッチの場合、下みたいに分けたりしてるのだけどそういう方法があれば教えてください
warn $1 if $str =~ m{(a[^a]a)\n\n}g;

433:デフォルトの名無しさん
10/05/23 13:41:44
>>432
ifをwhileに変えるだけ

warn $1 while $str =~ m{(a[^a]a)\n\n}g;

434:デフォルトの名無しさん
10/05/23 13:59:57
gオプションが付いても付かなくても
正規表現に括弧がひとつしかないから、$2と$3は未定義。
ループを回すたびに$1の内容が変わる。

435:デフォルトの名無しさん
10/05/23 14:09:01
my @matches;
push @matches, $1 while $str =~ m{(a[^a]a)\n\n}g;

436:デフォルトの名無しさん
10/05/23 14:25:05
while m//g とか while each %hash って気持ち悪いな

437:429
10/05/23 14:34:43
>>433-435
なるほど!ありがとうございます。while使うのかぁ。知らなかった。
perldoc perlreに書いてあるのかなぁって探してみたら書いてあった。勉強になりました。
@matches = ( 'foo' =~ m{ o? }xg );

or

print "match: <$&>\n" while 'foo' =~ m{ o? }xg;
せっかくなのでついでにもう一つ質問ですが、>>430みたいにm付けた場合もやり方がありますか?

438:デフォルトの名無しさん
10/05/23 14:59:38
>>437
ないと思う
mは^と$の意味が変わるだけだった気がする

439:デフォルトの名無しさん
10/05/23 15:51:17
なんか改行コードだけ特別扱いなんだよな

440:デフォルトの名無しさん
10/05/23 22:00:35
Perlのif文で質問があります。とあるデータ文書からPerlを使って情報を抜き出しているのですが、
情報1、情報2というのが存在して、情報1にヒットしたときは、情報1と情報2を出力、
情報1にヒットしないときは、無視というような判定をするにはどうすればよいのでしょうか?

441:デフォルトの名無しさん
10/05/23 22:09:09
perlに関係ないような気がするけど、こういう意味じゃないの?
if (情報1にヒット) {
  print 情報1;
  print 情報2;
}

442:デフォルトの名無しさん
10/05/23 22:12:57
>>441
データ文書の情報1と情報2が別々のところに記載されていてそれができないのです。
元データ文書を晒すので少々お待ちください。

443:デフォルトの名無しさん
10/05/23 22:24:18
両方揃ってから判断するのだ

444:デフォルトの名無しさん
10/05/23 22:32:12
このデータ文書ファイルです。
URLリンク(uploader.moe.hm) パス:perl

内容として作家情報と執筆した作品の情報が記載されています。
このファイルでは3名しか載っていませんが、実ファイルは世界中の作家情報が載っているので、
数万単位で同じような情報が載っています。
この中から、SCHOOLの行にUOFTOKYOと書いてある作家の作品だけを抜き出して出力できるようにしたいです。

445:デフォルトの名無しさん
10/05/23 22:35:10
DB_FileとかDBI使えばいいのに……Plain/textとはまた面倒な

446:デフォルトの名無しさん
10/05/23 22:53:34
>>444
schoolがuoftokyoの作家の名前を抜き出し、
その名前から違う場所にあるデータを抜き出して出力したいってこと?
大して>>441とやること変わらない気がするな
if (情報1にヒット) {
  作家名から情報2を取得;
  print 情報1;
  print 情報2;
}
こうなるだけじゃない?

447:デフォルトの名無しさん
10/05/23 22:57:06
>>446
仰る通りです。
コードを書いているのですが、情報1にヒットした後、
情報2を書き出してやると、UOFTOKYO以外の作家作品情報も出力されてしまい、
どうしていいのか分からない状態です。

448:デフォルトの名無しさん
10/05/23 23:13:39
>>447
情報2のデータの取得方法がおかしいんじゃいの?
そっちはどういうデータなの?

449:デフォルトの名無しさん
10/05/23 23:14:43
>>448
情報2はWORKSとENDの間の情報です。

450:デフォルトの名無しさん
10/05/23 23:33:20
現在書いているコードも載せておきます。

URLリンク(uploader.moe.hm) パス:perl

451:デフォルトの名無しさん
10/05/23 23:41:07
while (<IN>){
$line = $_;
なんだこれ

452:デフォルトの名無しさん
10/05/23 23:48:02
ああー、そんなこと書いたこともあった

453:デフォルトの名無しさん
10/05/24 00:19:55
テキストファイルだと>>444のようにやるのは無理なのでしょうか?

454:デフォルトの名無しさん
10/05/24 00:22:31
>>449
こんな感じかな。ネストがちょっと気持ち悪くてどうにかしたいけど
URLリンク(codepad.org)

>>450にソース上がってたのね。見てなかったわ

455:デフォルトの名無しさん
10/05/24 00:37:05
綺麗なコード書くなぁ
人の書いたコードは難しくて読めないことが多い俺にはちょうど良い読み易さだった

456:デフォルトの名無しさん
10/05/24 00:53:43
my $name ;
while(<>){
 $name = $_ if /^NAME/ ;
 next if ! ( /UOFTOKYO/ .. /^ID/ || eof );
 print $name and undef $name if defined $name ;
 next if !(/^WORKS/ .. /^END/ ) ;
 print ;
}
細かい所は知らん。


457:デフォルトの名無しさん
10/05/24 00:57:51
× /UOFTOKYO/ .. /^ID/ || eof
◯ /UOFTOKYO/ .. /^END/


458:デフォルトの名無しさん
10/05/24 01:01:27
>>456
おぉ。..ってそういう時も使えるのか。フラグ要らなかったな

459:デフォルトの名無しさん
10/05/24 02:00:33
へぇ、こんな使い方が出来るんだ。
30分位調べてようやく意味が理解出来た。

参考にした物
URLリンク(ja.wikibooks.org)
URLリンク(books.google.co.jp)

460:デフォルトの名無しさん
10/05/24 07:33:10
正規表現に必ずxmsつける人ははじめて見たけど流行ってんの?
個々の意味はわかるけどこうしとくといい理由とかあるんだろうか??

461:デフォルトの名無しさん
10/05/24 07:38:13
>>460
Perlベストプラクティスに書いてあった癖で書いちゃう
普通は気にしなくていいと思う

462:デフォルトの名無しさん
10/05/24 10:06:39
>>461
気になるのでどういう理由でそう書いてあったか憶えてたら教えてください。
本屋に行くにせよ尼かなんかでポチるにせよ週末になっちゃうので待てないw

463:デフォルトの名無しさん
10/05/24 17:45:34
googleのアカウント持ってるなら、
URLリンク(books.google.co.jp)正規表現&f=false
で、255ページから読め


464:デフォルトの名無しさん
10/05/24 17:47:37
あ、URLエスケープ忘れてた。
URLリンク(books.google.co.jp)

465:デフォルトの名無しさん
10/05/24 19:06:38
これ全ページ無料で読めるんだね、すごい。
売上が下がるかもしれないのにオライリージャパンは許容してるの?

466:デフォルトの名無しさん
10/05/24 19:11:40
多分許容してない>オライリー・ジャパン
アメリカでは既に訴えられて裁判になり和解まで行ってるようだけど日本は分からん。
訴えられるまでやりますって感じかもね。
本は実際に手にとって読みたい人がいるからこれは良い宣伝になり売上が伸びる。
ってのもあるだろうけど、これだけで済ます人も多そうだ。

467:デフォルトの名無しさん
10/05/24 19:15:03
よく見るとわかるけどたまに表示されないページがあるよ。

468:デフォルトの名無しさん
10/05/24 19:15:18
って左下に「O'Reilly Japanの許可を受けてページを表示しています. 」って書いてあるじゃねーかw

469:デフォルトの名無しさん
10/05/24 22:51:55
少なくともおれの場合は中身が見られることで洋書を買う量が増えたよ。
見るのはgoogleより米amaの方が多いけど。

470:デフォルトの名無しさん
10/05/24 23:12:24
おおー
こんなのが只で読めるとは

471:デフォルトの名無しさん
10/05/24 23:34:58
レイアウト解説本に載ってるのって、俺からすると読みづらいことばっか書いてるんだ
コメントが行区切りの役果たしてるんだから空白行いらんだろ、かえって関数が盾に間延びする

よく考えたらほとんどの環境でPerlの場合コメント着色されないんだっけ・・・区切りの機能果たさないなw

472:デフォルトの名無しさん
10/05/24 23:51:08
これ買うかどうか迷ってたけど欲しくなったわ

473:デフォルトの名無しさん
10/05/25 00:52:16
>>467
たまにどころか途中から全部仏陀義理じゃねーかw

474:デフォルトの名無しさん
10/05/25 23:02:04
そうなのか
まだ頭の方だからたまに飛ぶくらいでかなり役立ってる

475:デフォルトの名無しさん
10/05/26 13:48:27
Perlに匹敵するモジュールがそろった言語って他にありますか?
具体的には
・ActiveDirectoryの操作(Net::LDAP)
・FTPs
・WWW::Mechanize
・DBI
・Net::DNS
・GD
・関数のpack
このくらいはせめて欲しいのですが・・・

476:デフォルトの名無しさん
10/05/26 14:06:24
定番的なものはrubyにもpythonにも(そして多分schemeやHaskellにも)たいてい
相当するようなものはあるので好きなの使えばいいとおもうけど、そんなのは
それぞれのスレに行って聞けよ。でもわざわざ他の言語使わんでもperlでいい
んじゃね?

477:475
10/05/26 14:27:29
>>476
ありがとう。
Perlしか分からないので、Perlで書いたものを他に移植することで
勉強はじめようかと思いまして。
とりあえずスクリプト言語はPerlを嫁にして、
C/C++、Javaあたり覗いてきます。


478:デフォルトの名無しさん
10/05/26 17:00:41
URLリンク(usamimi.info)
にあるような感じで縦書きテキストビューワーを作っています。
引き数として与えられるファイルが、
テキストファイルなのかバイナリファイルなのか判定したいのですが、
-T でのテキストファイル判定はその判定方法から
UTF-8以外の日本語文字コードでは上手く機能しないらしくて困ってしまいました。
テキストファイルかバイナリファイルかを判定する良い方法は無いでしょうか?


479:デフォルトの名無しさん
10/05/26 19:28:28
Encode::guessで判定して、decodeするときにFB_CROAKを指定して
エラーにならなきゃOKとか?

480:デフォルトの名無しさん
10/05/26 19:29:25
guess_encoding()使ってるみたいだから、guessに失敗したら中断(現行コードのまま)でえーんでないの?
そもそも -T の精度も疑わしいし、ましてやWindows環境だとマジックナンバー照合による判定は無理なんでは?

判定精度を上げたいなら
use Encode::Guess qw/euc-jp shiftjis iso-2022-jp/;
  ↓
use Encode::Guess qw/euc-jp shiftjis iso-2022-jp cp932/;

481:デフォルトの名無しさん
10/05/26 20:21:46
全走査して\0が無ければテキストファイル。でもutf16/32は勘弁な。

482:デフォルトの名無しさん
10/05/26 21:11:04
>>478
テキストビューワなら、常にテキストと仮定しちゃえばいいんじゃないの?

483:デフォルトの名無しさん
10/05/26 21:55:51
>>482
まあ普通はそうだよなぁ
判定するようなエディタは少ない

484:478
10/05/26 23:48:34
>>479-483
レスありがとうございます。

guess しに行く前にどうにか判定出来ないかと
都合の良い事を考えていたのですけども、
>>482さんや>>483さんの仰るように常に対象はテキストファイルだと仮定して、
>>480さんのご指摘の通り現行コードのままにする事にしましす。

>>480
cp932 の事をうっかり忘れていました。
寧ろ shiftjis より cp932 の方が重要なのに…。
ご指摘ありがとうございます。


485:デフォルトの名無しさん
10/05/27 09:17:39
shiftjisとcp932の両方を候補に入れるとほとんどの場合区別がつかなくて
Encode::Guess->guessがエラー返すと思うのだが。

おおざっぱにいうとEncode::Guessの判定アルゴリズムは

1行ずつ候補のencodingでdecodeしていって、候補が1つになったら
それを返す。候補がなくなったり複数残ったらエラー(ただしasciiが
最終候補に含まれていたらascii)

だからね。

486:478
10/05/27 09:36:54
>>485
その通りなのです。
事実上、shiftjis よりも cp932 のテキストファイルを扱う方が圧倒的に多いと思って、
より現実に即して、判別候補の shiftjis を cp932 に変更しました。


487:デフォルトの名無しさん
10/05/27 09:49:56
どっちを扱うのが多いかより「~」などのunicodeへのマッピングが異なる文字を
どうしたいかの方が重要なきがする。

488:デフォルトの名無しさん
10/05/27 12:31:50
俺も縦書きやったことあるけど
unicodeに縦書き用のものがマッピングされてない約物({}…~など)は
回転するしかなくて、そのなかでも波ダッシュは鬼門だったな。

ちなみに《》()「」『』【】〔〕の約物については縦書き用の文字が用意されてる。

489:デフォルトの名無しさん
10/05/27 14:39:56
日本語フォントには縦書き用のグリフが含まれるからそれを使えばいいんだよ

490:デフォルトの名無しさん
10/05/27 19:23:42
EncodeでUTF-8にして扱うなら波ダッシュは全角チルダになっちゃうんじゃないの?


491:デフォルトの名無しさん
10/05/28 10:03:55
>>490
いやそれはおかしい。


492:デフォルトの名無しさん
10/05/28 19:01:24
上の方に出てたけどeucとsjisの~をutf-8に変換するとWAVE DASH (301C)になり
cp932の~をutf-8に変換するとFULLWIDTH TILDE (FF5E)になるみたいだね。

493:デフォルトの名無しさん
10/05/31 16:35:35
20年前に少しかじったBasic言語しか知らないおらが、突然Perlを学ぶことに目覚めました。
たぶん初めてのPerlという良書のおかげです。
C言語とかJavaとかPythonとか色々学ぼうとして挫折を繰り返していました。

いきなりですが、質問があります。お教えください。

#!/usr/bin/perl
print "Please enter a number \n";
chop($number=<STDIN>);
while($number=~/|\D/){print "Please enter only a number! \n";chop($number=<STDIN>);}
以下数字が入力された場合に続く。

上記のように、何も入力されなかった(改行のみ)り、数字以外が入力されたときに
エラーメッセージを出す方法を教えてください。

上記ではおそらくwhile($number=~/|\D/)の正規表現が間違っていると思います。
また、上記目的を叶えるためのエレガントな方法があればお教えください。

494:デフォルトの名無しさん
10/05/31 17:09:38
$number!~/^\d+$/
かねえ

#!/usr/bin/perl
print "Please enter a number \n";
while(1){
chop($number=<STDIN>);
last if $number=~/^\d+$/;
print STDERR "Please enter only a number! \n";
}
とか…?

495:デフォルトの名無しさん
10/05/31 17:42:19
>>493
繰り返しループ処理のやりかたがわからないワケだな。
プログラミングの基礎が備わってないな。perl以前の問題。
フローチャートから勉強しなおしなさい。

496:デフォルトの名無しさん
10/05/31 19:29:57
この時代にフローチャートかよw

497:デフォルトの名無しさん
10/05/31 19:34:20
オブジェクト指向とかカプセル化とか言っても訳わかんない気がする

498:デフォルトの名無しさん
10/05/31 20:08:51
>>494
ありがとうございます!
上手く動きました!!
空文字列のみを見つける正規表現があるのかと考えていましたが、
数字以外はダメという表記で良かったんですね。

ネットで探しても空文字列のみを見つける方法がよくわからなかったので悩んでいました。

>>497
自信を持って分かりますとは言えませんが、
サブルーチンなどで、プログラムの部品(パッケージ化とかカプセル化というのでしょうか)を
作って、プログラムを汎用性が高く、分かりやすく作ることかと理解しています。

初めてのPerlには、変数の扱いがCとは異なり、グローバル変数として扱われてしまう
と書かれていたので、Perlはオブジェクト指向としては、少し扱いにくい言語ということ
なんでしょうか?

499:デフォルトの名無しさん
10/05/31 20:18:17
>>498
Perlはオブジェクト指向もサポートしている。
変数については、myを使えばローカルな変数になる。
my $hensu;

500:デフォルトの名無しさん
10/05/31 20:18:17
>>498
20点くらいだな、その理解は

501:デフォルトの名無しさん
10/05/31 20:47:35
>>495,500
こういうのが癌

502:デフォルトの名無しさん
10/05/31 21:07:18
「いじめられる側にもいじめの原因がある」
「死刑には抑止力がある」
「何か言われて不快になったらその原因は発言者にある」


これまで当たり前だと思って、深く考えなかったこと・・・
周りに言われるままに、何の疑問も抱かなかったこと・・・
それらが本当に正しいのか、ちょっと立ち止まって考えてみませんか


虐めに関するよくある勘違い
URLリンク(jbbs.livedoor.jp)

死刑制度に関するよくある勘違い
URLリンク(jbbs.livedoor.jp)

外界は内界を映し出す鏡だって言ってたよ裏庭の鶏も
スレリンク(philo板:1-3番)

503:デフォルトの名無しさん
10/05/31 21:27:52
>>498
>空文字列のみを見つける正規表現

"\n"にもマッチしていいなら/^$/

504:デフォルトの名無しさん
10/05/31 21:43:52
>>498が何版目の「初めてのPerl」を読んだのかが気になる。
まさか 1995年刊行の Perl4時代のソフトバンク版じゃあるまいな?


505:デフォルトの名無しさん
10/05/31 23:25:06
手元の第三版にはchopは索引に載ってなかった。
chompの頁に「古いperlではchop演算子が使われていることがあります。」ってちょろっと書かれてるくらい。

506:デフォルトの名無しさん
10/05/31 23:45:07
誤解されそうなコメがあるから、おいらが補足。
ラクダ本第三版の索引にはchopは普通に載ってるし、それ以前にこんなの最新版Perlでちょろっと確認すれば済む話。
chopが何故か忌避されるのは、鋏の使い方を知らない馬鹿が多すぎたってことかな。
現在主流の馬鹿御用達言語PHPで、文字列末尾1文字を無条件に削除したい場合、使えねーsubstr()とか、preg_replace('/.$/u','',$hoge)とか使ってると、頭に蛆湧いてくるぜ。

507:デフォルトの名無しさん
10/06/01 00:08:25
おおー。ここ勉強になりますね!
>>499
知りませんでした。
手元にあるPerl本は古本屋で買ったので
初めてのPerl 1995年6月16日 初版
Perlプログラミング1995年6月5日 第7版
でした。

>>500
後の80点はどの辺が足りないのかお教えください。
パッケージ化することで、グローバル変数が氾濫しプログラムが読みにくくなったり、
エラーが起きやすくなることを防ぐ。ということも(あっていれば)知っています。

>>503
正規表現面白いッス!
while($answer!~/^\d+$/)
while($answer=~/^$|\D/)
この二つはほぼ同じと考えて良いんでしょうね!

>>504
まさかの初版でした!!

これからもよろしくお願いしマース!
なにせ、読み始めたのが昨日からなんです。



508:デフォルトの名無しさん
10/06/01 00:09:28
連続投稿すみません
自分の勉強のために
汚いコードでスレ汚しになりますが、Chap2の私の回答も載せますね。
#!/usr/bin/perl
$pai=3.141592654;
while($pronum!=5){
print "Chose program # (1-4 or to quit 5).\n";
chop($pronum=<STDIN>);
if ($pronum==1){
$pro1result=12.5*2*$pai; print "The result is $pro1result \n";}
elsif($pronum==2){
print 'Enter the radius'."\n";
chop( $radius=<stdin>);$radius *= $pai *2;
print "The result is $radius\n";}
elsif($pronum==3){print 'Plese enter 2 variables'."\n";
$first=<stdin>; $second=<stdin>; $first *=$second;
print "The result is $first \n";}
elsif($pronum==4){print "Please enter num and character \n";
chop($num=<stdin>);chop($char=<stdin>);$char=$char x $num;
print "The result is $char \n";}
elsif($pronum==5){print "Thank you for playing! \n";}
else{ print "Try again!\n";}
}

509:デフォルトの名無しさん
10/06/01 00:15:04
>>507
どうしても「初めてのPerl」を参考にして勉強したいというなら、
悪い事は言わないから第5版にした方が良い。
今、Perl4時代の本で勉強しても百害あって一利無しだと思うぞ?
いくらなんでも時代遅れ過ぎる。
>>507 が使ってる Perl まで Perl4 というわでもあるまいに。


510:デフォルトの名無しさん
10/06/01 00:22:42
>>507に必要なのは perldoc で perlintro を読む事

511:507
10/06/01 06:24:42
>>509
そうですか。うーん。
正規表現とか、考え方とかはそんなに変わらないかと思ったんですが、
有害なんですね。
できれば、オンラインで学習できるのが一番なんですが、まとまったサイトってありますか?

>>510
ありがとうございます。
でも読むコマンドがわかりませんでした。
私は、Macなので、ターミナルを起動して
>perldoc perlintroとコマンドを入力してみましたが、
perlintroというドキュメントはないというようなエラーが出ました。
No documentation found for "perlintro".


512:デフォルトの名無しさん
10/06/01 07:15:01
>>511
URLリンク(perldoc.perl.org)
URLリンク(www.perldoc.jp)
>>2

513:デフォルトの名無しさん
10/06/01 08:34:09
>>511
サンプルコードによるPerl入門
URLリンク(d.hatena.ne.jp)

日本の Perl ユーザのためのハブサイト
URLリンク(perl-users.jp)


514:デフォルトの名無しさん
10/06/01 14:55:03
スレリンク(saku2ch板:183番) 2010/04/01 21:55:59 HOST:softbank221101001151.bbtec.net
スレリンク(sakud板:209番) 2010/04/13 22:40:00 HOST:softbank221101001151.bbtec.net
スレリンク(sakukb板:196番) 2010/04/16 23:34:20 ID:GYnmPEAj0
スレリンク(sec2chd板:904番) 2010/05/30 16:54:09 ID:NuvDjPvV0

スレリンク(stadium板:687番) 2010/04/01 22:00:01 ID:mB5AiSFL
スレリンク(tennis板:27番) 2010/04/01 22:01:15 ID:+EaxE3Yd
スレリンク(sports板:78番) 2010/04/13 22:44:20 ID:bew0Nrvf
スレリンク(sports板:294番) 2010/04/14 09:35:45 ID:hjGULPLG
スレリンク(war板:319番) 2010/04/14 18:23:30 ID:+lNQ2DXA
スレリンク(kyozin板:91番) 2010/04/14 18:29:06 ID:3CDN5Ccw0
スレリンク(wres板:47番) 2010/04/14 18:30:38 ID:9IsRU2FN0
スレリンク(ski板:573番) 2010/04/16 23:39:04
スレリンク(goveract板:510番) 2010/04/18 17:31:32 ID:pk5WfpDm
スレリンク(gutter板:517番) 2010/04/18 17:34:51 ID:34DVdrjm

スレリンク(stadium板:707番) 2010/05/10 22:44:12 ID:hX93YGf3
スレリンク(cancer板:273番) 2010/05/10 22:46:25 ID:nHvjUfwZ
スレリンク(sports板:636番) 2010/05/11 18:17:35 ID:yYc33zVj
スレリンク(war板:342番) 2010/05/16 18:50:43 ID:6cddBk0z
スレリンク(war板:217番) 2010/05/30 16:50:31 ID:2FL8NGA8
スレリンク(equestrian板:760番) 2010/05/31 21:06:11 ID:34qn98Gz


515:507
10/06/01 22:30:15
>>512
>>513
丁寧にありがとうございます。
無事Perlintroを読み終えることができました。
まだデータ形式のハッシュはよく理解していませんが、少しずつ理解しようと思います。
サンプルコードによる・・には、新しい版用のコードの書き方の解説もあったので、
今持っている初めてのPerl本と見比べながら学びたいと思います。

ありがとうございました!


516:デフォルトの名無しさん
10/06/03 16:42:25
2ちゃんねるにアクセスしたいんですがもうずっと人大杉となってしまいます。
回避する方法はありますか?

517:デフォルトの名無しさん
10/06/03 16:55:32
まず服を脱ぎます。

518:デフォルトの名無しさん
10/06/03 18:23:10
脱ぎました。
次はどうすればいいですか?

519:デフォルトの名無しさん
10/06/03 18:50:55
>>518
口に鉛筆を咥える。

520:デフォルトの名無しさん
10/06/03 19:02:34
マジレスすると2chはUser-Agentがlibwww-perlとかだと弾くようになってる

521:デフォルトの名無しさん
10/06/08 11:05:28
文字列をutf8からsjisに変換するのに、jcode を使用すると特定の文字が変換されずに?になってしまいます。('1~5' → '1?5')
正しく変換するにはどのようにすればよいのでしょうか。

#!/usr/bin/perl

use Jcode;

my $utf = "1~5";
my $sjis = jcode($utf)->sjis;
my $euc = jcode($utf)->euc;

print jcode($sjis)->utf8 . "/" . $utf . "/" . jcode($euc)->utf8;


522:デフォルトの名無しさん
10/06/08 11:28:59
>>521
すみません。自己解決しました。
use Jcode; を use Jcode::CP932; に変えるだけでした。


523:デフォルトの名無しさん
10/06/08 11:35:22
昔の人がユニコードと既存の文字コードの対応関係を決めるときに
統一に失敗したので面倒なことになってます。ほんと迷惑。

524:デフォルトの名無しさん
10/06/09 11:02:37
Apache2+mod_perlやってるんですが、
その回のリクエストが終わっても残り続けるグローバルな変数って
ありますか?
メモリ上に残り続けるフラグを持ってリクエストのたびに処理を分岐したいです。

525:デフォルトの名無しさん
10/06/09 11:13:11
>>524
ファイルか、DBに残せばよいのでは?

526:デフォルトの名無しさん
10/06/09 11:40:52
アクセス数(マルチスレッド)が半端ないので
ファイルはなるべく避けたいです。
フラグ一つのためにDB構築するのもなんか微妙なので。

527:デフォルトの名無しさん
10/06/09 11:51:05
IPC::ShareLiteとか使うのがいいんじゃね?

528:デフォルトの名無しさん
10/06/09 11:53:33
printf "%.2f\n", 90.1730;
printf "%.2f\n", 90.1740;
printf "%.2f\n", 90.1750;
printf "%.2f\n", 90.1760;
printf "%.2f\n", 90.1770;

printf "%.2f\n", 90.1630;
printf "%.2f\n", 90.1640;
printf "%.2f\n", 90.1650;
printf "%.2f\n", 90.1660;
printf "%.2f\n", 90.1670;

この処理ですが、上の段は、5捨6入しているのですが、
下の段は4捨5入の処理をしています。

90.17
90.17
90.17
90.18
90.18

90.16
90.16
90.17
90.17
90.17

いろいろと試したのですが、printfがどういったルールで
丸めの処理をしているのかまったくわかりませんでした。
ググッてもこの処理の違いに関する説明もでてきません。
この処理の違いがわかる人はいませんか?

529:デフォルトの名無しさん
10/06/09 12:08:50
>>528
内部は2進数なので、2進数だと無限小数になっちゃう
数は有限桁数で表すと誤差が出るんだよな。

もう少し先の桁まで出すと

% perl -e 'printf "%.20f\n", 90.1750;'
90.17499999999999715783

なので四捨五入だと切り捨ての方になっちゃうんだよね。

530:デフォルトの名無しさん
10/06/09 12:09:59
>>526
なら、WebPage側にhidden項目でも作って、そこに保存しておくとか・・・

531:デフォルトの名無しさん
10/06/09 12:22:41
mod_perlは使ったことないけどmod_speedycgiなら……

532:デフォルトの名無しさん
10/06/09 13:35:48
>>530


533:デフォルトの名無しさん
10/06/09 16:10:35
>>524
グローバル変数で変数を持たせるとセッションが続く限り、内部データは引き継がれる。
これはspeedycgiでも同じ。

普通は変数が引き継がれると困るので、局所変数で宣言するが、普通のcgiだと、cgiが
実行されるごとに、グローバル変数はリセットされるため、局所でもグローバルでもあま
りあまり関係ない。そのため後からuse strict;で変数管理をしようとしてもエラーだらけで、
直しようがなくなる。

534:デフォルトの名無しさん
10/06/09 22:41:24
use strict するとエラーが発生するCPANモジュールは登録しないで欲しい。

535:デフォルトの名無しさん
10/06/10 00:15:55
>>534
まさかstrictにrefs入れてないよね?

536:デフォルトの名無しさん
10/06/10 02:01:07
use stritc;
しておいて必要なところだけブロック切って
no strict 'refs';
だろjk

537:デフォルトの名無しさん
10/06/10 12:14:48
>>534
obsoleteなブツなんでないの?
同等以上の新しいモジュールがあるだろ。

538:デフォルトの名無しさん
10/06/10 17:21:59
test.txt文書内にある
abc001.jpg
abc002.jpg
という2行の文字列を
<Vol.001>abc001.jpg
<Vol.002>abc002.jpg
と書き換えてoutput.txtに書き出すPerlスクリプトを書きたいと思っています。
しかし、test.txt内の文字列が1行の場合には上手くいきますが、
例のような複数行では
<Vol.001>abc001.jpg
abc002.jpg
となってしまいます。
どこが間違っているのでしょうか?

#!/usr/bin/perl
use strict;
use warnings;
$a="test.txt";
$b="output.txt";
open my $in , '<', $a or die "Cannot open '$a': $!";
open my $out, '>', $b or die "Cannot open '$b': $!";
while(<$in>){
s/abc(.+?)\.jpg/<Vol\.$1>abc$1\.jpg/;
print $out $_;
};
close($in);
close($out);

539:デフォルトの名無しさん
10/06/10 17:55:00
そのままコピペしたけどちゃんと動いたぞ?
あと関係ないけど、せっかくuse strictしてるんだから$a , $b はつかうな

540:デフォルトの名無しさん
10/06/10 20:11:20
配列の宣言についての質問なんですが
my @x=(1,2,3,4,5,6,7,8);
my $y=100;
my @pi =(@x/$y);

この様に@で配列を制限し
my @piの中身を1/100,2/100,3/100,4/100,・・・
として以下の計算につなげたいのですが、
どうしても上手くいきません・・・

foreach文なども試してみましたがダメでした
非常に低レベルの質問ですがどうかご教授よろしくお願いします

541:デフォルトの名無しさん
10/06/10 20:19:29
my @x=(1,2,3,4,5,6,7,8);
my $y=100;
my @pi;

foreach my $tmp (@x){
    push(@pi, $tmp/$y);
}

foreach my $tmp (@pi){
    print "$tmp, ";
}

542:デフォルトの名無しさん
10/06/10 21:06:34
key1, key2, ..., keyN, Value (N=10程度)
のようなレコードを持ったCSVファイルに対して,
keyA=AAAかつkeyB=BBBのレコードのValueの合計,平均,...etc
といった統計を計算する最もスマートな方法を教えてください.
レコード数は数十万~数百万行を想定しています.

543:デフォルトの名無しさん
10/06/10 21:38:31
>>524
ourで宣言すればおk。
でも保持できるのはプロセス単位だから共有メモリ使った方がいいと思う。storableとか

544:デフォルトの名無しさん
10/06/10 22:03:32
>>540
URLリンク(perldoc.jp)

my @pi = map $_ / $y, @x;

545:デフォルトの名無しさん
10/06/10 22:19:50
my @pi = map {$_ / 100} (1 .. 8);
print "$_, " for (@pi);

546:540
10/06/10 23:13:47
>>541>>544>>545
わざわざ理解しやすい回答ありがとうございます
早速スプリクトに組み込んでみます

547:デフォルトの名無しさん
10/06/11 00:01:18
>>542
その数ならDBに突っ込んでSQLでやる

548:デフォルトの名無しさん
10/06/11 00:24:13
合計と平均なら頭から読んで足したり数えたりするだけで
いいと思うけど。

549:デフォルトの名無しさん
10/06/11 03:47:48
>>539
コメントありがとうございます。
問題点は、入力用ファイルの改行コードでした。
改行コードをUnixではなくMacの改行コードにしていたので、
2行が1行と認識されてしまっていたようです。

ずっと正規表現の問題だと思っていたので、コメントのおかげで別の観点で見直すことができました。

素人なのでもう一つ質問させてください。
>$a , $b はつかうな
というのは、意味のない変数名を使うのではなく、
$infile,$outputfileなどのように一目で意味のわかる変数名を使いなさいということでしょうか?

550:デフォルトの名無しさん
10/06/11 03:51:22
>>549
$aと$bはsortの時に使われる。つか、use strictしてるのにmyなしで動いてる時点で「あれ?」ってなったでしょ?
perldoc -f sort
> global variables $a and $b

551:507
10/06/11 06:33:39
>>550
丁寧にありがとうございます。
色々調べてやっと仰っていることが理解できた気がします。
やはり、初めてのPerl初版本を読んでいた弊害がありそうです。

でもこのサンプルコードによるPerl入門は素晴らしいですね。
URLリンク(d.hatena.ne.jp)

552:デフォルトの名無しさん
10/06/15 18:38:48
指定の処理を行いログを出力するプログラム hoge.plと
そのログを読み込み解析し出力する analyst.plを作り、
普段はhoge.plを使いたまにanalyst.plを実行するという事をしてきました。

今回その解析済みログを利用するためにhoge.plの中でanalyst.plを実行させたくなったのですが
require('analyst.pl');としたところ"\x{00cd}" does not map to cp932 at analyst.pl line 12.
というエラーが大量に出ました。

これは両方のplファイルにuse utf8; binmode STDOUT ":encoding(cp932)";があり
analyst.plでutf8からcp932に変換されたものがhoge.plでさらにcp932に変換されているからのようで
analyst.pl内のbinmode~;をコメントアウトするとうまく動くようになりました。
しかしanalyst.plの単独実行時にうまく動かなくなりました。

このような場合どうすれば両立させることができるのでしょうか?お知恵を貸して欲しいです。

This is perl, v5.10.1 built for MSWin32-x64-multi-thread

553:デフォルトの名無しさん
10/06/15 19:01:09
>>552
ちょっと面倒だけど新たにAnalyst.pmを作成し、そこにanalyst.plの機能を全部放り込んだサブルーチンを作り、
hoge.plとanalyst.plはそれを読み込み実行すれば両立出来るよ。

hoge.plとanalyst.plの二つのファイルだけでは・・・できるのかな?

554:デフォルトの名無しさん
10/06/15 20:02:21
>>553
そこまでするならモジュール化すればいいだろw

555:デフォルトの名無しさん
10/06/15 20:06:22
試してないけど ':raw :encoding(cp932)' みたいにレイヤー重ねがけすればとりあえず動くんじゃね

556:デフォルトの名無しさん
10/06/15 20:43:23
>>552
requireする前にbinmode STDOUT=>":raw";
あるいはanalyst.pl内のbinmode文をbinmode STDOUT=>":raw:encoding(cp932)";

557:552
10/06/15 21:25:50
なるほど、:rawを重ねると生データにリセットできるんですね。
requireする前に一行追加することで簡単に実現出来ました。
呼び出し前に:rawにして呼び出し先で:cp932に再セットされるという流れもなんだか良いです。

>>553-556
みなさんレスありがとうございました。

558:552
10/06/15 21:54:21
このスレ雰囲気良いね

559:デフォルトの名無しさん
10/06/16 03:43:58
一気に雰囲気が悪くなった

560:デフォルトの名無しさん
10/06/16 05:22:30
そんなこというなよ…

561:デフォルトの名無しさん
10/06/16 17:53:09
perlスクリプトファイルのコメント部分だけ取得する良い方法はないでしょうか?

単純に # より前を消すみたいのを自分で作ってたんですが、print '#'; とか、s#a#b#;
というのも考えられるなとか、ヒアドキュメント中の # はどうするとか、、、

私の脳みそでは確実に無理なので、なにかないでしょうか?

562:デフォルトの名無しさん
10/06/16 19:11:59
つ正規表現

563:デフォルトの名無しさん
10/06/16 19:59:14
m{
hoge # not comment
}



m{
hoge # comment
}x

の区別とか想像しただけで嫌になるよなw

564:デフォルトの名無しさん
10/06/16 20:23:53
>>561
perltidyとかは?

565:デフォルトの名無しさん
10/06/16 20:30:46
$_ = '1"##"#a"';
print qq#\# match #, '#', "\n" if /"#a/ && m#[^\#]\##; # こめんと; { #" ですよ}

考えてみようとして例を作っただけでつらくなってきた

566:デフォルトの名無しさん
10/06/16 20:42:23
PPIとか使ってみれば? 正規表現の中のコメントは対応
できてないみたいだけど、他は結構いけるようだよ。

567:デフォルトの名無しさん
10/06/16 23:08:27
正規表現のxオプション使ってる?

568:デフォルトの名無しさん
10/06/17 00:40:40
>>561
Text::Balanced とかは?

569:デフォルトの名無しさん
10/06/17 03:22:58
とりあえず#の後に;がない行を抜き出してみて、それでどれくらい引っかかるか見てみれば?
厳密にやろうと思えば何らかのPerlパーサを使わないと、正規表現でちょいちょいやるっていうのは無理だろうな。

570:561
10/06/17 10:33:00
>>562-569
ありがとうございます。なかなか難しいんですね・・。

気づいたのですが、秀丸とか(ほぼ)ちゃんとコメント色分け出来てますよね。
やっぱり偉大なソフトですね・・。

571:デフォルトの名無しさん
10/06/17 11:57:22
どの辺までフォローしてるのかしらんけど
Regexp::Common::commentとか


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch