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

Referenzen: Type Globs und Referenzen



<< >> 8 Einträge, 1 Seite
Gast Gast
 2006-04-19 17:11
#65066 #65066
Hi erstmal hab ein problemchen komm bei einer Sache nicht weiter :(

Tutorialpage

hab von dem Kapitel davor diesen Code gemacht, der auch läuft nur irgendwie ist es mir zu kompliziert geschrieben wie ich die nächste Übungsaufgabe machen soll, kann mir da einer maybe weiterhelfen, bin halt noch nicht so Perl-Profi :(

Mein Quellcode:

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
#!/usr/local/bin/perl
#
#
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);

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

my $text = '/SAN/content/cgi-bin/text';

my ($out, $tmp);

open (F, "<", $text);
my @lines = <F>;
close (F);

chop( @lines );
my $lines = "@lines";

#Hauptroutine

&suchstring;
&for;


#Subroutinen

sub suchstring {

my $s = "[Dd]u";
@lines = split ( /$s/, $lines );
}

sub for {

for ( my $i = 0; $i < $#lines; $i++ ) {
$out = substr( $lines[$i], length($lines[$i]) - 20, 20 );
$out .= "du";
$out .= substr( $lines[$i + 1], 0, 20 );

print $out."\n";

}
}

exit 0;


Uebung lautet:

Man nehme die Uebung des letzten Kapitels und tausche die Parameter der Subroutine aus. Damit das funktioniert, muss man eine Referenz auf den Array der Textstücke übergeben und in der Subroutine den Array dereferenzieren.

Ich versteh da nicht wirklich die Aufgabenstellung x_X

Naja wäre für ein wenig Hilfe (egal welche art) von euch Könnern sehr dankbar :)

bye bye

Edit Relais: Code-Tags spendiert.\n\n

<!--EDIT|Relais|1145452753-->
Relais
 2006-04-19 17:17
#65067 #65067
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
for ist eine in Perl eingebaute Funktion. Wenn Du Deiner eigenen Subroutine vielleicht einen anderen Namen geben könntest?
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
renee
 2006-04-19 18:05
#65068 #65068
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ein paar Anmerkungen:

Du solltest chomp statt chop benutzen, da Du nicht unbedingt ein Zeichen weghaben willst, sondern nur den Zeilenumbruch. chomp entfernt Dir den Zeilenumbruch (wenn man es ganz genau wissen will entfernt es den Inhalt von $/ - aber das ist hier egal), während chop Dir auf jeden Fall das letzte Zeichen entfernt!

Du solltest Fehlerbehandlung machen. Du prüfst z.B. gar nicht, ob Du die Datei überhaupt zum lesen öffnen konntest. Du solltest Deinen Code also so erweitern:
Code: (dl )
open(F,"<", $text) or die $!;


Du solltest mit Übergabeparametern arbeiten (Was auch von der Aufgabenstellung verlangt wird) - und die dann auch möglichst im Gültigkeitsbereich einschränken. Im Moment benutzt Du nur globale Variablen.

Vergleiche:
Code: (dl )
1
2
3
4
5
6
7
8
9
# ohne Übergabeparameter
my $text = "hallo";
&subroutine();
print $text;

sub subroutine{
$text .= "perl-community.de";
print $text;
}


und
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
# mit Übergabeparameter

my $text = "hallo";
&subroutine($text);
print $text;

sub subroutine{
my ($text) = @_;
$text .= "perl-community.de";
print $text;
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2006-04-19 18:06
#65069 #65069
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zum Thema Referenzen kannst Du Dir auch mal perlreftut anschauen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
master
 2006-04-19 19:34
#65070 #65070
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Oder gleich als funktion mit:

Code: (dl )
1
2
3
4
5
6
7
# mit Übergabeparameter als funktion

my $text = "hallo";
print &subroutine($text);

sub subroutine
{ return "$_[0] perl-community.de"; }


oder ganz verrückt ohne rückgabeparameter *lol* !! :-)

Code: (dl )
1
2
3
4
5
my $text = "hallo";
&subroutine($text);
print;

sub subroutine { $\ = "$_[0] perl-community.de"; }
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
master
 2006-04-19 19:37
#65071 #65071
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
my $text = "hallo";
print &subroutine($text);

sub subroutine { "$_[0] perl-community.de" }
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
haijp
 2006-04-20 13:32
#65072 #65072
User since
2006-04-11
14 Artikel
BenutzerIn
[default_avatar]
Holla...


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
#!/usr/local/bin/perl
#
#
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);

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

my $text = '/SAN/content/cgi-bin/text';

my ($out, $tmp);

open (F, "<", $text) or die $!;
my @lines = <F>;
close (F);

chop( @lines );
my $lines = "@lines";

#Hauptroutine

my $s = "[Dd]u";
@lines = split ( /$s/, $lines );

@_ = ($s, @lines);

&suchstring(@_[0], @_[1]);
&schleife;


#Subroutinen

sub suchstring {}

sub schleife {

for ( my $i = 0; $i < $#lines; $i++ ) {
$out = substr( $lines[$i], length($lines[$i]) - 20, 20 );
$out .= "du";
$out .= substr( $lines[$i + 1], 0, 20 );

print $out."\n";

}
}

exit 0;


Hmm bin zwar auch neu aber hab mal was probiert, ist das ungefähr sowas? Hab dein $s und @lines in die Speziarray gepackt @_ und das dann in der Subroutine mit Parametern aufgerufen.\n\n

<!--EDIT|haijp|1145525739-->
Dubu
 2006-04-20 14:43
#65073 #65073
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=haijp,20.04.2006, 11:32]
Code: (dl )
1
2
3
4
@_ = ($s, @lines);

&suchstring(@_[0], @_[1]);
&schleife;
[/quote]
Mir erschließt sich der Sinn dieser Zeilen nicht.
Das Array @_ manuell zu füllen ist selten sinnvoll; es ist dazu da, um in einer Subroutine an die Übergabeparameter zu gelangen (siehe perlvar). Die Sub suchstring() macht gar nix, denn sie ist leer. Und die Sub schleife() benutzt nach wie vor die dateiweit deklarierten Variablen @lines und $out. Nichts besser als vorher. Und das chop() ist auch immer noch kein chomp().
<< >> 8 Einträge, 1 Seite



View all threads created 2006-04-19 17:11.