ディレクトリにある複数のファイルを順番に調べて読み出すには
MSCやVC++ではFindFirstとFindNextを使ってファイル名を調べて
オープンしますが、Perlではどうやればいいのでしょうか?

A 回答 (2件)

こんなカンジ?



$dir = './data/';
opendir( DIR, $dir);
while( $file = readdir(DIR) ){
open( IN,$dir.$file );
~なんか処理~
close( IN );
}
closedir( DIR );
    • good
    • 0

OpenDirで当該ディレクトリを開いて、取得したディレクトリハンドルに対してReadDirを実行すればファイル名の一覧が手に入るので、その結果を配列に格納してForeachループを回せばほぼ同じような処理が可能ですね。


最後にCloseDirでディレクトリハンドルを開放するのを忘れずに(笑)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QVC++ でCGIのプログラム開発

VC でCGIのスクリプト開発は可能なのでしょうか?
OK Web をみていて、CでCGI を開発している、とか
出てきて、ふと思いました。

Aベストアンサー

VC++でも当然開発かのう。
ただし、C系のCGIの実行の場合はCGIを実行する環境と持っている開発環境のマッチング具合で順位付けされてゆく。

1.自分のローカルウィンドウズパソコンのためのCGIならば、VC++でCGIを作ったものとしては、100%マッチングしている。

2.サーバーがWindowsNTなどで、自分のパソコンがWindows系であれば、ローカルほどではないにしても、非常に高いマッチング(環境が想定できる)率を誇るため、これもかなり楽に開発ができる。

3.事実的に圧倒的に多い、UNIX,LINUX系のサーバー用のCGIとしては、全く威力を発揮しない。例えば、VC++には恐ろしく多くのライブラリが存在するが、それらのほとんどはCGI作成とは関係が内上、UNIX、LINUX系のCGIには絶対と言って良いほどの必需品である、unistd.hなどのほとんど全てがVC++には実装されていない。実際に『ある程度強度が高い』CGIを作成する場合にはほとんど致命的と言えるダメージ。

結局、C/C++系のCGIは、サーバーと自分のOSが同じ『バイナリファイル』で動く環境でない限りは、『サーバーのコンパイラ』でコンパイルしなければなりません。
自分のローカルのコンパイラでコンパイルが通ってからと言っても何にもならないと言えます。
となれば、サーバー上のコンパイラを含む呼び出せるコマンドなどの環境と、自分のローカルの環境を(OS自体はいれかえることなく)いかに近づけるか、ということでしょうね。いちいちCGIごときのためにOSは切り替えてられないですからね。

VC++でも当然開発かのう。
ただし、C系のCGIの実行の場合はCGIを実行する環境と持っている開発環境のマッチング具合で順位付けされてゆく。

1.自分のローカルウィンドウズパソコンのためのCGIならば、VC++でCGIを作ったものとしては、100%マッチングしている。

2.サーバーがWindowsNTなどで、自分のパソコンがWindows系であれば、ローカルほどではないにしても、非常に高いマッチング(環境が想定できる)率を誇るため、これもかなり楽に開発ができる。

3.事実的に圧倒的に多い、UNIX,LINUX系の...続きを読む

Qperl PHP C++ それぞれのメリット、デメリット

現在CGIを設置したく、勉強をはじめようとしています。
そこでperlとPHPのどちらにしようか考えていたところ、C/C++も使えると知り、基礎的なことだけですが経験のあるC++を使おうかどうか迷っています。しかし、それぞれのメリット・デメリットを知り、それを踏まえた上で使用言語を判断したいので、今回質問させていただきました。
それぞれの言語のできることやできないこと、速度などの違い、習得のしやすさ、柔軟性など、様々な観点からのメリットとデメリットを教えていただけると幸いです。
ちなみに、ただ掲示板なんかを設置したいというわけではなく、最終的には様々な用途に対応できるよう技術力を磨き勉強したいと考えています。

検索するとperlとPHPの比較はあっても、C++まで比較対象にいれてるサイトがなく、わからなかったので質問させていただきました。
よろしくお願いします。

Aベストアンサー

CGI というのは入出力ができる言語であれば何でも作成できます。
例えシェルであっても、Pythonであっても、Rubyであっても、Javaであっても。

で、まずC/C++のメリットとデメリットを理解されていますか?
大胆ながら挙げてみますとこんな感じでしょうか。

メリット:
- コンパイルしてから実行するため動作が高速
- OSレベルの細かいところまで制御可能
デメリット:
- 文字列の扱いが面倒
- コンパイルが必要
- セキュリティホールを生みやすい

CGIの場合はフォームに入力された値を解析するところから
始まるので、上記のうち「文字列の扱いが面倒」というのは
重大な欠点となります。また、メモリの細部まで制御できる
ため、「セキュリティホールを生みやすい」(特にバッファ
オーバーフロー)という非常に重大な欠点を持っています。
なので、高度なパフォーマンスを要求される場合を除いて
C/C++が使われることはあまりないと言ってよいと思います。

PHP と Perl については、Web のみを勉強の目的とするのであれば
どちらでもよいと思います。ただし、OS (例えばLinux) もあわせて
勉強したいというのであれば、Web 以外のところでも使われることが
多い Perl をお勧めします。

余談ですが、PHP は CGI の言語として使用されることは少なく、
多くの場合は Apache などの Web サーバにモジュールとして
組み込むことによって使用されます。ですから、CGI に特化したい
という場合も Perl をお勧めします。

CGI というのは入出力ができる言語であれば何でも作成できます。
例えシェルであっても、Pythonであっても、Rubyであっても、Javaであっても。

で、まずC/C++のメリットとデメリットを理解されていますか?
大胆ながら挙げてみますとこんな感じでしょうか。

メリット:
- コンパイルしてから実行するため動作が高速
- OSレベルの細かいところまで制御可能
デメリット:
- 文字列の扱いが面倒
- コンパイルが必要
- セキュリティホールを生みやすい

CGIの場合はフォームに入力された値を解析する...続きを読む

QVC6++ char配列の文字列をシリアライズする方法

入門書には、char配列の文字列をシリアライズで保存する場合は、CStringにキャストして保存するとあったのですが、保存時は

ar << (CString)m_char;

で保存されているようなのですが、読み出し時はどうすればいいのでしょうか?

ar >> (CString)m_char;

では読めませんでした。
VC初心者です。よろしくお願いします。

Aベストアンサー

char配列の文字列とCStringは同じような扱いができますが別物です。そして

CString型=char配列

という代入はできますが(これは保存するときに行われる)

char配列=CString型

という代入はできません(質問ではこの代入をしようとしてます)

一旦、CString型で読み込んでからchar配列に別の方法で代入する方法があります。CStringのクラスメンバを参照してみては?

例えば、
ar >> str; // strはCString
// この後、strからm_charに代入する



補足:
CStringからcharへうまく変換するクラスメンバは無いようですね……もし、私ならchar配列を使用せず、CStringの変数を直接扱うと思いますが……

QPerlでCGIを書いておりますが、特定のURL(ディレクトリ)の位置データを取得するには?

PerlでCGIを書いております。
http://test.com/a/test/index.cgiにアクセスしているときに、perlがaを取得して、http://test.com/b/test/index.cgiにアクセスしているときbを取得する良い方法は有るのでしょうか?WindowsとLinuxの両方で動作できれるものがあれば宜しくお願いします。
WindowsとLinuxではディレクトリの感じが違うようなので1個の方法で実現できれば助かります。

Aベストアンサー

質問の意図がいまひとつ。。。(^^;)

環境変数 DOCUMENT_ROOT を参照すれば、

a/test/index.cgi が動作している、*本当の*パスを取り出すことができます。
ここから、/a/test/index.cgi を取り出してください。
環境が分からないので、どこから取り出せば良いのか。と言うことは分かりませんが、/public_html より右側にあるものを取得すれば良いのでは無いかな。と思います。

> bを取得

の部分の質問の意図がさっぽり分かりません。
/b/test/index.cgi はどの様に決定される。と言う予定で居られるのか分からないと、アドバイスできません。

また、

> WindowsとLinuxの両方で動作

と言うのは、Webサーバーが、Windows と Linux にインストールされている。と言う意味でしょうか?
サーバーの種類が分かりませんが、環境変数 DOCUMENT_ROOT が参照できる可能性が高いと思いますし、、/public_html より右側にある文字列を、パスとして取得すれば良いのだと思います。

質問の意図がいまひとつ。。。(^^;)

環境変数 DOCUMENT_ROOT を参照すれば、

a/test/index.cgi が動作している、*本当の*パスを取り出すことができます。
ここから、/a/test/index.cgi を取り出してください。
環境が分からないので、どこから取り出せば良いのか。と言うことは分かりませんが、/public_html より右側にあるものを取得すれば良いのでは無いかな。と思います。

> bを取得

の部分の質問の意図がさっぽり分かりません。
/b/test/index.cgi はどの様に決定される。と言う予定で居られる...続きを読む

QPerlでディレクトリごと削除したい

telnet.cgiを使って、カレントディレクトリで、
rm -rf *
を行っても、なぜか(permissin 755にも関わらず)permission denyといわれうまく削除できませんでした。
そこで、perlを使って削除を試みたいのですがどのようにすれば、削除できますか?

参考になりそうなソースを見つけたのですが、ディレクトリの中にディレクトリがある構造のためうまく削除できませんでした。
どなたか、改良していただけないでしょうか?
お手数ですが、宜しくお願い致します。




#!/usr/local/bin/perl

$dir = "./d/";

opendir DIR, $dir;
@files = grep { !m/^(\.|\.\.)$/g } readdir DIR;
close DIR;

$flag = @files;

if ( $flag ) {
foreach $file ( @files ) {
unlink "$dir$file";
}
}

rmdir $dir;

telnet.cgiを使って、カレントディレクトリで、
rm -rf *
を行っても、なぜか(permissin 755にも関わらず)permission denyといわれうまく削除できませんでした。
そこで、perlを使って削除を試みたいのですがどのようにすれば、削除できますか?

参考になりそうなソースを見つけたのですが、ディレクトリの中にディレクトリがある構造のためうまく削除できませんでした。
どなたか、改良していただけないでしょうか?
お手数ですが、宜しくお願い致します。




#!/usr/local/bin/perl

$dir = "./...続きを読む

Aベストアンサー

しつこくてスマン、、更に付けたし、、、

御判りかと思いますが
普通のISPなどパブリックなスペース上で、
ディレクトリを707などにすると
他のユーザーのCGIからも、あなたの方のディレクトリ内に
任意のfileを置くことが可能になりますので、気をつけてください


おすすめ情報