Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7294[/thread]

file::copy

Leser: 5


<< >> 8 Einträge, 1 Seite
DocJunioR
 2005-09-20 11:15
#58237 #58237
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
Also ich versteh das nicht. Ich möchte nichts weiter tun als eine Datei kopieren.
Der Code in einem Testscript funktioniert:
Code: (dl )
1
2
3
4
5
use lib "N:/wntapp/perl/perl583/lib";
use strict;
use warnings;
use File::Copy;
copy ("o:/monique/faq.dat", "d:/faq.dat");

Mein eigentliches Projekt will allerdings die Funktion copy nicht kennen. File::copy ist in der .pm eingebunden.
Die Funktion zum Kopieren sieht so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
--schnipp
sub copyfile
{
my $self = shift;
my $src = $_[0];
my $param = $_[1];
my $dest = "left";
my $file = undef;
my @data = undef;
my $srcfile = "";
my $destfile = "";

if (defined($param))
{
@data &
nbsp; = @{$param};
}

if ($src eq "left")
{
$dest = "right";
}

foreach $file (@data)
{
$srcfile = $self->{$src."path"}.$file;
$destfile = $self->{$dest."path"}.$file;

if (defined($self->{$src."ftp"}))
{

if (defined($self->{$dest."ftp"}))

{ # ftp -> copy;

$self->{$src."ftp"}->get ($srcfile, "c:/temp/".$file );

$self->{$dest."ftp"}->put ("c:/temp/".$file, $destfile );

unlink "c:/temp/".$file; &nb
sp;

} else { # ftp -> get;

$self->{$src."ftp"}->get($srcfile, $destfile );

}
} else {

if (defined($self->{$dest."ftp"}))

{ # ftp -> put;

$self->{$dest."ftp"}->put($srcfile, $destfile);

} else { # copy;

copy ($srcfile, $destfile);

}
}
}

$self->reloaddir($src);
$self->reloaddir($dest);
}
schnapp--

Folgendes ist meine Meldung.
Quote
Tk::Error: Undefined subroutine &prj::cftpwindow::copy called at prj/cftpwindow.
pm line 378.
prj::cftpwindow::copyfile at prj/cftpwindow.pm line 378
prj::cftpwindow::event at prj/cftpwindow.pm line 396
prj::clist::call_event at prj/clist.pm line 230
prj::clist:: at prj/clist.pm line 115
[\&prj::clist::]
Tk callback for .frame1.frame.button
Tk:: at N:/wntapp/perl/perl583/site/lib/Tk.pm line 228
Tk::Button::butUp at N:/wntapp/perl/perl583/site/lib/Tk/Button.pm line 111
(command bound to event)

Für mich sieht es danach aus, dass er einfach die File::copy nicht reinlädt.
Eingebunden sind folgende Dateien:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
use strict;
use warnings;

use Tk;
use Tk::Dialog;
use Net::FTP;
use File::copy;

use prj::clist;

package prj::cftpwindow;


Könnte mir da wer HIILLFEEE!! ?
nepos
 2005-09-20 11:20
#58238 #58238
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm, also im 2. Code-Schnipsel solltest du
Code: (dl )
use File::Copy;
statt
Code: (dl )
use File::copy;
schreiben.
Eventuell musst du auch
Code: (dl )
use File::Copy qw(copy);
machen, obwohl laut manpage das ganze ohne den qw(..) Part klappen sollte.\n\n

<!--EDIT|nepos|1127200914-->
DocJunioR
 2005-09-20 11:21
#58239 #58239
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
die Groß-Kleinschreibung ist nicht das Problem.. Habs schon auf einige Arten probiert
esskar
 2005-09-20 11:22
#58240 #58240
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
versuch s mal so
Code: (dl )
File::copy ($srcfile, $destfile);
esskar
 2005-09-20 11:23
#58241 #58241
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
aber das modul heißt, def.
Code: (dl )
File::Copy

also musst du auch
Code: (dl )
use File::Copy;

sagen
DocJunioR
 2005-09-20 12:12
#58242 #58242
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
hab nen bißchen rumgespielt:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
use strict;
use warnings;

package prj::cftpwindow; # <<< verschoben nach hier

use Tk;
use Tk::Dialog;
use Net::FTP;
use File::copy;

use prj::clist;


So tut er's. aber warum?? Die package ist übrigens eine mit Konstruktor, etc. also ne Klasse
pq
 2005-09-20 12:42
#58243 #58243
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
use File::Copy importiert die funktion copy in deinen momentanen
namespace.
wenn du also im skript (package main) File::Copy lädst, kannst du dort die
funktion copy benutzen.
woanders jedoch nicht! nur, indem du File::Copy::copy aufrufst.
das kannst du ganz einfach umgehen, in dem du nicht im skript, sondern
im module File::Copy lädst, was wesentlich sauberer ist, denn das modul
ist es doch, welches File::Copy braucht ("use").
perldoc use
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Crian
 2005-09-20 15:12
#58244 #58244
User since
2003-08-04
5867 Artikel
ModeratorIn
[Homepage]
user image
Außerdem solltest Du die Module so einbinden, wie sie heißen und nicht anders, nur weildas zufällig auf Deinem Windowsrechner gut geht. Also File::Copy.

Deweiteren sind Module mit gänzlich klein- oder gänzlich großgeschriebenen Namen reserviert. Du solltest Deins also umbenennen.\n\n

<!--EDIT|Crian|1127214775-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< >> 8 Einträge, 1 Seite



View all threads created 2005-09-20 11:15.