トップページ⇒php
1001コメント316KB

Perlコーディング初心者質問スレ Part 47

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/03/01(水) 15:39:31ID:???
Perlのコーディングで困ってる人のスレです。 

【投稿する際の注意】 
質問するときは内容をよく吟味してから投稿してください。 
「コマンドの意味がわかんない」とかはマニュアル見ましょう。 
回答者さんは何でも屋じゃありません。 

1: 自分はこういう事がしたい。 
2: それでこんな風にやってみたが・・・ 
3: こんなエラーが出て上手く行かなかった。 

最低でも1と3が無いと誰も答えられないよ。 
ソース貼る時は、全角スペースでインデント忘れずに。 
良い回答は良い質問から。一緒に勉強しましょう。 

過去ログやお勧めサイトは >>2-10 
0685nobodyさん2006/04/15(土) 15:21:49ID:???
a[^z]*?b
0686nobodyさん2006/04/15(土) 15:49:39ID:???
>>684
こう
^a[^z]*b$
0687nobodyさん2006/04/15(土) 16:11:35ID:c44RBImj
JPG、GIF、および PNG 画像を、単にピクセル リサイズではなく、きれいに縮小してくれる Perl モジュールを探しています。
0688nobodyさん2006/04/15(土) 16:14:12ID:???
ImageMagick
0689nobodyさん2006/04/15(土) 18:06:11ID:c44RBImj
単にピクセル リサイズではなく、きれいに縮小
0690nobodyさん2006/04/15(土) 18:07:08ID:???
ImageMagick
0691カシス2006/04/15(土) 18:44:04ID:???
質問スマソ。
自作Perl・CGIで作るマガをwebを通して発行する。
outlook2000で見ると改行できない。
他のbeckyとかoutlookexpressならちゃんと改行出来ている。
・・・そこで一度FTPを通してアップするとちゃんと改行出来ている。

自分PerlもCGIも詳しくないのでナゼなのかわからないのです。
CGI・Perlの両方のデータ持ってるんで誰か心優しい方教えてください。
0692nobodyさん2006/04/15(土) 18:46:15ID:???
日本語でもう一度質問して下さい
0693nobodyさん2006/04/15(土) 18:58:32ID:c44RBImj
では、もう一度質問します。
JPG、GIF、および PNG 画像を、単にピクセル リサイズではなく、きれいに縮小してくれる Perl モジュールを探しています。
0694nobodyさん2006/04/15(土) 19:04:10ID:???
ImageMagick
0695nobodyさん2006/04/15(土) 19:04:11ID:???
IMは綺麗に縮小してくれますよ
0696nobodyさん2006/04/15(土) 19:32:16ID:???
つ optpix
0697nobodyさん2006/04/15(土) 20:24:26ID:q8gKpXSp
Perlで変数名を動的に付ける方法を教えてください; たとえば、「yamada」と入力があった場合は「$yamada」なる変数を作るという意味です(「入力」というのは、あくまで例です)。
「なんでそんなこと考える必要がある?代替法を考えてやるから、やりたいことを書いてみろ」というのではなく、所期の目的を達成する方法だけを教えてください。
0698nobodyさん2006/04/15(土) 20:33:36ID:???
>>697
なんでそんなこと考える必要がある?代替法を考えてやるから、やりたいことを書いてみろ



>>574-581
0699nobodyさん2006/04/15(土) 20:37:39ID:q8gKpXSp
エスパーの方、お願いします。
0700nobodyさん2006/04/15(土) 20:44:07ID:???
${'yamada'} = 'vip';
print $yamada;
0701nobodyさん2006/04/15(土) 20:44:33ID:???
次の質問どうぞ
0702nobodyさん2006/04/15(土) 20:49:22ID:???
もう来ねぇよ
0703nobodyさん2006/04/15(土) 20:53:54ID:???
オレ697だけどもう来ねぇよ
0704nobodyさん2006/04/15(土) 21:03:35ID:???
>>703
ID出せよm9(^Д^)プギャー
0705nobodyさん2006/04/15(土) 22:04:00ID:???
>>687-690, >>693-694
お前ら、おもろいな。
0706nobodyさん2006/04/15(土) 22:23:24ID:???
>>687-690, >>693-694
爆笑したwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwww
0707nobodyさん2006/04/15(土) 22:27:10ID:???
>>687-690, >>693-694

ここまで頭の悪い質問者と、律儀な回答者は、初めて見た。
0708nobodyさん2006/04/15(土) 22:53:42ID:???
そんなに面白いか?
0709nobodyさん2006/04/15(土) 23:14:40ID:???
ややウケ
0710nobodyさん2006/04/15(土) 23:30:23ID:oGexcrlz
http://www3.pref.yamanashi.jp/uryo/i/C06.htmlにアクセスしてデータを取得するCGIを作ってます。

サーバーにアクセスすると、サーバーがデータをよこさない様子で
下のスクリプトの最後の行の手前までは問題なく動くのですが、最後の行で止まります。
どうやらwww3.pref.yamanashi.jpのサーバー全てで同じく止まるようです。

このスクリプトでwww.pref.yamanashi.jpはじめ他のサーバーなら問題なくデータが取得できているので
スクリプトの基本はできているはずなんですが何が問題なんでしょうか?どうぞよろしくお願いします。

print SOCK "GET @_[1] HTTP/1.1\n";
print SOCK "Host: @_[0]\n";
print SOCKET "Connection: close\n\n";
print SOCK "User-Agent: @_[2]\r\n";
print SOCK "\r\n";
@SOCK = <SOCK>;
0711nobodyさん2006/04/15(土) 23:36:47ID:???
あーもうめんどいから
use LWP::Simple;
して
$data = get 'http://www3.pref.yamanashi.jp/uryo/i/C06.html';
でもしとけ
0712nobodyさん2006/04/15(土) 23:53:56ID:???
突っ込み所が多すぎてもうどこから突っこんでいいやら
スライシングになってるのとか\r\nと\nの混在とか一つだけSOCKETとか…
配列の要素一つを表すには$_[0]…というか名前付けろよ

まあLWP使って置いた方が確実
0713nobodyさん2006/04/16(日) 01:09:21ID:???
確かに、つっこみたい点は多いのだが、試しに
perl -MLWP::Simple -e "print get 'http://www3.pref.yamanashi.jp/uryo/i/C06.html';"
してみると、確かに何も出ない。
どういうことだ?
0714nobodyさん2006/04/16(日) 01:16:23ID:???
Windows XP SP2 Active Perl 5.8
0715nobodyさん2006/04/16(日) 01:18:01ID:???
ではちゃんと取得できるけど。
0716nobodyさん2006/04/16(日) 01:23:03ID:???
>713
今試したら出てきたよ
07177132006/04/16(日) 01:41:35ID:???
単なるPMTUブラックホールでした。スマソ。
おそらく710も同じ原因だと思われ。
でも、スクリプトが酷すぎるので、LWPを使うのをお勧めする。
07187102006/04/16(日) 03:09:37ID:???
皆さんありがとうございます。
細かい文法もわからずコピペで作ったので
これを機に直してみます。

とりあえずLWPというのをやってみます。
0719nobodyさん2006/04/16(日) 05:48:11ID:???
コピペで作ったって?えらい度胸あるな。
どうしても実現したいという気持ちはわかるが。
0720nobodyさん2006/04/16(日) 10:26:11ID:???
Windows ActiveOerl 5.8.7なんですが、

ABC[CR][LF]
ABC[CR][LF]
ABC[CR][LF]
([CR]は\x0Dで[LF]は\x0Aです)

こんなファイルを

open(DAT,"TEST.txt");
binmode(DAT);
print while( <DAT> );
close(DAT);

として読み出すと、なぜか
ABC[CR][CR][LF]
とCRが増えるんですが何故でしょうか?
[LF]を[CR][LF]に変換しちゃってるようなんですが、binmodeにしても変換が行われるのですか?
0721nobodyさん2006/04/16(日) 11:04:54ID:???
>>720
Perlは入力と出力、両方で改行コードをいじる機能がONになっている。
どういう用途か知らんが、(binmodeしてない)テキストモードなら入力のCRLFをちゃんと\nとして認識してくれるぞ?
0722nobodyさん2006/04/16(日) 11:21:18ID:???
おおなるほど、binmode(STDOUT)でうまくいきました。

CGIのヘッダとして常に出力する定型文があるのですが、それはLFで保存されています。
ついでにHTTPレスポンスも外のファイルにしたいと思いまして。
そこで、HTTPの応答はCRLFだったので、外部ファイルにCRLFで保存して試したところ
上のような状態になりまして…。

よく見れば定型文の方もLFが全てCRLFになっていたのですが、こっちは気がつきませんでした。
どうもありがとうございました。
0723nobodyさん2006/04/16(日) 11:49:38ID:???
ActiveOerl
0724nobodyさん2006/04/17(月) 20:57:23ID:???
このスレで
変数名の内容の変数を作る
ってのを見たんだけど、これを関数で出来ないんですか?

たとえば
my($funcname) = 'calc';
ってしたあとに
&{$funcname}
ってやると
sub calc
が呼ばれるみたいな感じ

何がやりたいのかっていうと、自分で書いてるスクリプトに plugin で機能追加できるように
したいんですけど、イマイチやりかたが思い浮かばないので上記の方法が出来れば簡単かなって・・・
0725nobodyさん2006/04/17(月) 21:03:38ID:???
ごめん自己解決しました

my($funcname) = \&{'test'};

で関数名を入れて、

&$funcname;

で呼び出せました

plugin を実現するには require とか use しないといけないかなぁ・・・とか思ってたけど、
これでなんとかperlでもっともっと遊べそうです
0726nobodyさん2006/04/17(月) 21:05:31ID:???
あっ、require とか use はしなくちゃいけないんだよ
何書いてんだか orz


package でスクリプト書ける人はこんな回りくどいやり方とかはしないのかしらん?
plugin とか実装したことのある人の意見とかアドバイスがあったらよろしこです m(_ _)m
0727質問2006/04/17(月) 21:09:36ID:fgM7OcPI

正規表現にて
&str1 = "ZZZZ"
&str2 = "YYYY"
$bufの値の中で
value="xxxZZZZxx"
を見つけたら
value="YYYYxxxZZZZxx"
に一括変換したい。
(xは任意の文字列、英数字および.~-/?&+=:@%;#%)

いろいろ試しましたが
$bufから"value="が消滅したりしてだめでした。

だれか力を貸してください。
07287272006/04/17(月) 21:25:52ID:fgM7OcPI

正規表現でもなくともいいのですが・・・
0729nobodyさん2006/04/17(月) 21:27:37ID:???
>>724
「require」「package」「シンボルテーブル」あたりの知識が足りないの分かってんなら調べりゃいいじゃん。
そもそもplug-inで追加される機能が誰に対してのものなのか。

>>727
$bufの文字列内に$str1が存在すれば$bufの7文字目と8文字目の間に$str2を挿入するってこと?
substrを左辺値にして使うといい。
どうしても置換でしたければ s/^(value=")(.*$str1.*")$/$1$str2$2/;
0730nobodyさん2006/04/17(月) 22:01:31ID:???
よく >>727の壊れた質問の意味が分かったねぇ。。。
大体&str1, &str2って何よw
07317272006/04/17(月) 22:08:29ID:fgM7OcPI

>>730
$str1,$str2でした。
07327272006/04/17(月) 22:33:27ID:fgM7OcPI

>>729
>$bufの文字列内に$str1が存在すれば$bufの7文字目と8文字目の間に$str2を挿入するってこと?
という意味ではなく、
$bufの文字列内の任意位置に「value="xxxZZZZxx"」(xは0文字以上の英数字(.~-/?&+=:@%;#%))
という文字列部分を
「value="YYYYxxxZZZZxx"」に変換したかった。

ありがとうございます。
$buf =~ s/(value\=\")([\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]*$str1[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]*\")/$1$str2$2/g;
にて動作いたしました。(テストパターンが万全ではないですが・・・)

何か間違いなどがございましたら、ご指摘ください。
0733nobodyさん2006/04/17(月) 22:43:52ID:???
pluginて書いたこと無いが、
opendirでpluginディレクトリ開いて順に名前を取得したらrequireなりuseなりすりゃいんじゃないの?

てか明らかにuse strict;したこと無いやつにそこまで無理するなと言いたい
0734nobodyさん2006/04/17(月) 23:01:48ID:???
これ参考にすればよくなくね?

sub load_plugin {
my($self, $config) = @_;

my $module = delete $config->{module};
$module =~ s/^Plagger::Plugin:://;
$module = "Plagger::Plugin::$module";

if (my $path = $self->plugins_path->{$module}) {
eval { require $path } or die $@;
} else {
$module->require or die $@;
}

$self->log(info => "plugin $module loaded.");

my $plugin = $module->new($config);
$plugin->cache( Plagger::CacheProxy->new($plugin, $self->cache) );
$plugin->register($self);

push @{$self->{plugins}}, $plugin;
}
0735nobodyさん2006/04/17(月) 23:22:47ID:???
無意味なエスケープ大杉
0736nobodyさん2006/04/17(月) 23:23:20ID:???
735は>>732宛
0737nobodyさん2006/04/17(月) 23:38:05ID:???
うごきゃええねんうごきゃ
0738nobodyさん2006/04/18(火) 00:03:22ID:???
>>734
はてブからきますた
0739nobodyさん2006/04/18(火) 00:49:34ID:???
それどこのはてブ?

http://ex14.2ch.net/test/read.cgi/news4vip/1145258206/
0740nobodyさん2006/04/18(火) 00:52:31ID:???
>733
require した際に各プラグインが最初に実行する関数をたとえば pluginmain としたとして、
そうすると複数のプラグインで関数名がだぶることになって -W 付で実行してるとエラー吐かれるんですよ
だから各プラグインで実行される関数名をプラグインから指定すりゃまぁなんとかなるかなって思った次第です

>734
その関数に渡される値が何なのかわからないからどうとも言えないかなぁ


とりあえず真面目にパッケージとか学んでみようかと思う
0741nobodyさん2006/04/18(火) 01:07:27ID:???
>>740
> その関数に渡される値が何なのかわからないからどうとも言えないかなぁ

調べればわかるのでは?
0742nobodyさん2006/04/18(火) 02:36:43ID:???
>>740
#!/usr/bin/perl -W
use strict;
{ package Foo; sub new { bless { foo => 'foo' } } sub var { $_[0]->{'foo'} } }
{ package Bar; sub new { bless { bar => 'bar' } } sub var { $_[0]->{'bar'} } }
{ package Baz; sub new { bless { baz => 'baz' } } sub var { $_[0]->{'baz'} } }
print join ',', Foo->new->var, Bar->new->var, Baz->new->var;
__END__
http://www.kt.rim.or.jp/~kbk/perl5.005/perlmod.html
http://www.kt.rim.or.jp/~kbk/perl5.005/perlobj.html
http://www.kt.rim.or.jp/~kbk/perl5.005/perlbot.html
http://perl.infoware.ne.jp/documents/perlboot.ja.html
http://search.cpan.org/~miyagawa/Plagger-0.6.3/
0743nobodyさん2006/04/18(火) 10:30:14ID:???
733です。

パッケージなんて簡単だろ。
package Plugin::Foo
sub baa{

}
....

て書いてrequire Plugin::Foo;
名前空間を無かったことにしたいなら呼び出し先でuse Exporter;しろ
0744nobodyさん2006/04/18(火) 13:20:05ID:???
正規表現なんですが・・・、
掲示板等でタグを使用不可にしたいのですが、
&は変換するけど、&はそのままで除外するという場合
どのようにすればよいでしょうか?

$str =~ s/&[^(amp;)]/&/g;

このようにしたのですがうまくいきません。
07457442006/04/18(火) 13:23:54ID:???
あれ?表示されなかった。
訂正します。全角にしました。

&は変換するけど、&amp;はそのままで除外するという場合です。
$str =~ s/&[^(amp;)]/&amp;/g;

うまくいきません。
0746nobodyさん2006/04/18(火) 14:13:25ID:???
s/[^(&amp;)]&/&amp;/ig;
0747nobodyさんNGNG
>>744
それ自体を実現するには否定先読みを使えば良い
$str =~ s/&(?!amp;)/&amp;/g;

が、もしかすると、やりたいことは置換の順序を変えればできたりしない?
$str =~ s/&/&amp;/g;
$str =~ s/</&lt;/g;
$str =~ s/>/&gt;/g;
$str =~ s/"/&quot;/g;
07487442006/04/18(火) 14:45:53ID:pGVz01kP
>>746
出来ませんでした。ありがとうございました。

>>747
おぉ!出来ました。ありがとうございました。
否定先読みというのは初めて知りました。
ちなみに「やりたいこと〜」でご指摘されてることは私の想定していたことではありませんが、
よく見るそのやり方の順序に意味があったとは知りませんでした。
なるほど、勉強になります。
0749nobodyさん2006/04/19(水) 16:50:38ID:YxQG/IvK
外国からのスパムに悩まされてます。
で、ある文字列数以上の長さ以上で
  文字列($comment)に全角がなかったら スパムって判定をしたいと考えてます。

見よう見真似で
---------------------------------------------------------
if(length($comment) > 128){ #128文字以上の場合チェック
$spam_flg = 1;

if ($comment =~ /[\xA1-\xFE][\xA1-\xFE]/){ #全角が含まれてるから日本語
$spam_flg = 0;
}
if($spam_flg > 0){ #多分に外国のお方。
Error("スパムでした");
}
}
----------------------------------------------------------
でやったのですが
判定が成功せずに、全文半角でも $spam_flg= 0 になっちゃいます。
if ($comment =~ /[\x80-\xff]/) {  でもだめでした。
文字コードはEUCです。

 どなたか m(_ _"m)ペコリ
0750nobodyさん2006/04/19(水) 17:41:23ID:???
ttp://www.kanzaki.com/docs/jcode.html#euc
0751nobodyさん2006/04/19(水) 17:52:53ID:???
教えてください。

Jcodeを使うときに、

$str = jcode($str)->mime_encode;

で、メールのヘッダ部分を作れ、

$str = jcode($str)->mime_decode->sjis;

で元に戻りますよね?
で、同じことをEncodeモジュールでやろうとして

use Encode 'decode', 'encode';
my $str = 'ソース焼きそば十杯おいしいな☆';
my $header = encode('MIME-Header-ISO_2022_JP', $str);

だとエンコードされた文字列がおかしく(Jcodeと比較して)、さらにデコードの方法がわかりません。

my $str =
'=?ISO-2022-JP?B?P1w/Wz9YPxskKEQ/PxsoQj8/Pz8bJChEPz8bKEJcP3Q/Pz8/Pz8/Pz8/?=
=?ISO-2022-JP?B?Pz9cPz8/GyQoRD8/GyhCPz8/Pz8/Pz8/Pz8/?=';
$str = decode('MIME-Header-ISO_2022_JP', $str);

だと、”MIME B unsupported..”

Encode::from_to($str,'MIME-Header-ISO_2022_JP','shiftjis');
でも同じ・・・
ソースはsjis書いています。
よろしくお願いします・・・。
0752nobodyさん2006/04/19(水) 18:11:24ID:???
encodeはUTFフラグ付しか受け付けなかった希ガス
07537492006/04/19(水) 20:40:17ID:tcTD8ojr
>>750さん、ありがとうです。
でも、全角文字の判別がよくわかんないです
 もうちょっと。。 m(_ _"m)ペコリ
0754nobodyさん2006/04/20(木) 11:17:19ID:???
>751
# Shift_JISで保存
use Encode qw/encode decode/;
use Jcode;

my $str = 'ソース焼きそば十杯おいしいな☆';

# Jcode
my $header_jcode = jcode($str)->mime_encode;
print "$header_jcode\n";
print jcode($header_jcode)->mime_decode->sjis, "\n";

# Encode
my $header_encode = encode('MIME-HEADER-ISO_2022_JP', decode('Shift_JIS', $str));
print "$header_encode\n";
my $decoded = encode('Shift_JIS', decode('MIME-HEADER', $header_encode));
print "$decoded\n";
07557512006/04/20(木) 17:25:34ID:???
>>752
>>754

754でできました。ありがとう。
0756nobodyさん2006/04/20(木) 17:58:44ID:???
千奈美にdecodeでフラグ付UTFに変換してる
0757nobodyさん2006/04/20(木) 22:59:54ID:???
>>749
128文字以上。って条件を忘れてテストしてないかい?
0758nobodyさん2006/04/21(金) 16:34:52ID:c29HAKrq
ある変数に全角文字が1文字入ってるのですが、
この1文字が「漢字」か「漢字以外」かを判別する方法を教えて下さい。
文字コードはEUC使ってますが、UTF-8でも良いです。
よろしくお願い致します。
0759nobodyさん2006/04/21(金) 16:39:19ID:???
/[亜-熙]/ 漢字の範囲
JperlかPerl5.8以降を使ってねん
0760nobodyさん2006/04/21(金) 16:40:03ID:???
あ、Jperlはshiftjisだっけ。条件からいきなり外れて失礼。
0761nobodyさん2006/04/21(金) 17:12:42ID:???
>>758
1バイト目が\xB0以上だったら漢字でいいんじゃない
0762nobodyさん2006/04/21(金) 17:17:29ID:???
>>758
\x8Fで始まる3バイト漢字を忘れていた
0763nobodyさん2006/04/21(金) 17:20:11ID:c29HAKrq
>>759
ありがとうございます。やってみたのですが、上手く動きません。
ひらがなにもカタカナにもマッチしてしまいます。

試しに

/あ/

だと、ちゃんと「あ」にマッチするのですが、

/[あ]/

だと、「あ」以外の全ての文字にマッチしてしまいます。
どうも日本語で文字クラスが使えないっぽい…。

Perlのバージョンは5.8.5、EUC環境です。
何か初歩的なまちがいをしてるような気もしますが、
もしありがちなミスなどあれば教えて下さい。
よろしくお願い致します。
07647632006/04/21(金) 17:51:19ID:???
すいません。うまくいかないのでutf-8でやったら
全て解決しました。
みなさん、ありがとうございました。
0765nobodyさん2006/04/21(金) 23:19:35ID:???
あるフォルダαに入っているファイルA、B、C のパーミッションを全て統一したい時はどういった方法があるのでしょうか?
ABCは数が変動する為指定する事ができずお手上げで…。
0766nobodyさん2006/04/21(金) 23:20:59ID:???
そういう質問はお手上げで。w
0767nobodyさん2006/04/21(金) 23:32:11ID:???
system 'chmod -R 000 /path/to/folder';
0768nobodyさん2006/04/22(土) 00:07:01ID:???
>>767
頭が悪い例を示してますね。
0769nobodyさん2006/04/22(土) 00:27:08ID:???
まぁ、君よりはマシだけどね
0770nobodyさん2006/04/22(土) 00:40:06ID:???
>ABCは数が変動する為
ファイル数が変動するってことか?
readdirでファイル一覧取得してchmodじゃだめなのか?

いいたいことを勘違いしてたらすまそ
0771nobodyさん2006/04/22(土) 04:40:48ID:???
File::chmod使って

use File::chmod;

chmod(0666, <*>);

とか?
0772nobodyさん2006/04/22(土) 08:49:21ID:???
すみません、お願いします。

ファイル名を変えるのに、単純に、
rename "AB1234.txt","AB0000.txt";
は上手くできるのですが、

ディレクトリ内のファイルの探してから名前を変えようと
したら上手くいきません。何がダメなんでしょうか?
use File::Find;
$dir="./";
find(sub { push @files, $File::Find::name if -f }, $dir);
foreach(@files){
if(substr($_,2,2) eq "AB"){
$file1=$_;
}
}
$file2="AB0000.txt";
rename "$file1","$file2";

よろしくお願いします。
0773nobodyさん2006/04/22(土) 11:03:29ID:???
if(substr($_,2,2) eq "AB")

この条件に当てはまらなかった時、$file1はどうなる?
0774nobodyさん2006/04/22(土) 11:12:22ID:???
っていうか、そもそもsubstrのパラメータがおかしいじゃん。

print substr("AB1234.txt", 2, 2);

を見てみる所から始めないと。デバッグの基本だよ。
Perl以外の言語経験があるかどうかは分からないけど、このレベルだと
何かプログラムと呼べる物を完成させるのは難しいと思う。
0775nobodyさん2006/04/22(土) 11:33:07ID:???
if(substr($_,2,2) eq "AB") からして間違ってたか。→ "12"
ただしこれでも、/^..12(.*)/のファイルが全部条件に当てはまるので
どっちにしてもダメ。
やりたい事をぼかすのではなく、もっと正確に書かないと…。

カレントを見るならFile::Findなんか使う必要もないし、全体的に意味不明。
07767512006/04/22(土) 12:35:38ID:???
>>756
SJISやEUCでソース書く限り、その処理が全部について回るのか・・・
ありがとう。

>>772
単純にforeach(@files)の中で

if($_ =~ /^AB/){
  ・・・
}

でだめなん?

$_ =~ /^AB\d{4}/
$_ =~ /^AB\d{4}.txt$/

とか、大文字小文字区別したくなかったら最後に/iとか。
意味が違う?
07777722006/04/22(土) 19:08:13ID:???
レスありがとうございます。

if(substr($_,2,2) eq "AB"){ の件なんですけど、

@filesで格納されているのは、 "./AB1234.txt" となるので、
"./"を外すためにやってます。

カレントディレクトリの中に入っている ABで始まるファイルを
見つけて、それのファイル名を変更したいのです。
0778nobodyさん2006/04/22(土) 19:18:24ID:???
ああ、申し訳ない。「./」が入るんだね。
じゃあこれでどうよ。

@files = grep /^AB/, glob "*";
rename shift @files, "AB0000.txt";
07797722006/04/22(土) 19:35:58ID:???
すみません、ありがとうございました。
じっくり考えたらこういうやり方がある事がわかりました。

@files=glob("AB*.txt");
$file1=$files[0];
$file2="AB9999.html";
$res = rename "$file1","$file2";

まだまだ勉強不足を痛感しました。(汗)
0780 ◆TWARamEjuA NGNG
(´-`).。oO(ファイル名が存在しなかったときはどうなるんだろう。。。)
07817722006/04/22(土) 21:13:23ID:???
>>780
ファイルは必ずあるので大丈夫です。
0782 ◆TWARamEjuA NGNG
opendir my $dir_handle, './' or die "Can not open directry.:$!";
foreach my $source_file (grep /^AB/, readdir $dir_handle) {
 $source_file or die "file not found.:$!";
 rename $source_file, $dist_filename
  ? last
  : die "Can not rename file.:$!"
}
closedir $dir_handle;

こんな感じかしら。。。
と思ったら、、、

>>781
そうですか。スマソ。
0783nobodyさん2006/04/23(日) 00:45:55ID:???
772じゃないけど・・・

>782
くじけずにこれからもよろしこですm(_ _)m
0784nobodyさん2006/04/23(日) 06:58:39ID:???
>>782
メンテナンス性のわるいコードでつね。
■ このスレッドは過去ログ倉庫に格納されています