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

Parameter -f

Leser: 2


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
crackbrained
 2004-12-16 12:16
#50008 #50008
User since
2004-12-13
12 Artikel
BenutzerIn
[default_avatar]
Hallo!

Ich bin absolute Perlanfängerin und habe eine Frage zu dem Parameter -f. Was sagt mir dieser Parameter? Bisher habe ich (nur) rausgefunden, dass es sich um einen Operator für eine reine Textdatei handelt.
Wie kann ich nun in meinem Perl-Skript einbauen das dieser Parameter auf der Kommandozeile akzeptiert wird?
renee
 2004-12-16 12:31
#50009 #50009
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Willkommen auf Perl-Community.de

mit -f kannst Du überprüfen, ob eine Datei eine "normale" Datei ist (also kein Verzeichnis oder so...).
z.B.
Code: (dl )
1
2
3
4
5
6
7
8
9
#! /usr/bin/perl

use strict;
use warnings;

my $file = '/zu/pruefende/datei';
if(-f $file){
print "Ist ne Datei\n";
}


Aber was meinst Du mit
Quote
Wie kann ich nun in meinem Perl-Skript einbauen das dieser Parameter auf der Kommandozeile akzeptiert wird?
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
 2004-12-16 12:32
#50010 #50010
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wenn es Dir um Optionen für den Perl-Interpreter geht, dann hilft Dir perl -h:
Quote
perl -h

Usage: perl [switches] [--] [programfile] [arguments]
-0[octal] specify record separator (\0, if no argument)
-a autosplit mode with -n or -p (splits $_ into @F)
-C enable native wide character system interfaces
-c check syntax only (runs BEGIN and CHECK blocks)
-d[:debugger] run program under debugger
-D[number/list] set debugging flags (argument is a bit mask or alphabets)
-e 'command' one line of program (several -e's allowed, omit programfile)
-F/pattern/ split() pattern for -a switch (//'s are optional)
-i[extension] edit <> files in place (makes backup if extension supplied)
-Idirectory specify @INC/#include directory (several -I's allowed)
-l[octal] enable line ending processing, specifies line terminator
-[mM][-]module execute `use/no module...' before executing program
-n assume 'while (<>) { ... }' loop around program
-p assume loop like -n but print line also, like sed
-P run program through C preprocessor before compilation
-s enable rudimentary parsing for switches after programfile
-S look for programfile using PATH environment variable
-T enable tainting checks
-t enable tainting warnings
-u dump core after parsing program
-U allow unsafe operations
-v print version, subversion (includes VERY IMPORTANT perl info)
-V[:variable] print configuration summary (or a single Config.pm variable)
-w enable many useful warnings (RECOMMENDED)
-W enable all warnings
-X disable all warnings
-x[directory] strip off text before #!perl line and perhaps cd to directory
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/
Taulmarill
 2004-12-16 12:33
#50011 #50011
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
bist du dir sicher, dass du -f und nicht -F meinst?
Code: (dl )
1
2
$ perl -f
Unrecognized switch: -f (-h will show valid options).

weder perl 5.8.0 auf Solaris noch 5.8.4 auf x86 kennt den parameter. in den dokus hab ich den auch nicht gefunden. wo hast du das denn her?
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
crackbrained
 2004-12-16 12:45
#50012 #50012
User since
2004-12-13
12 Artikel
BenutzerIn
[default_avatar]
Es handelt sich um eine Aufgabe aus meinem Skript für Bioinformatik (http://www.biophys.uni-duesseldorf.de/~wilm/bioinf2/skript/09_kurs.ps)
Darin steht, dass ich ein Perl-Skript schreiben soll, dass u.a. auf der Kommandozeile den Parameter -f für ein zu lesendes Alignment akzeptiert.

edit renee: Link repariert\n\n

<!--EDIT|renee|1103194361-->
Relais
 2004-12-16 12:46
#50013 #50013
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=crackbrained,16.12.2004, 11:16] -f. Was sagt mir dieser Parameter? Bisher habe ich (nur) rausgefunden, dass es sich um einen Operator für eine reine Textdatei handelt.[/quote]

@crackbrained:
Eine gute Antwort hat Dir @renee schon gegeben.
Die Dokumentation zu all den Datel-Test-Parameter kriefst Du mit dem Kommandozeilenaufruf perldoc -f -X bzw. auch hier: -X.

Edit: JFI hab ich's hier mit heißer Feder übersetzt: -f -X - Korrekturen erwünscht.

Quote
Wie kann ich nun in meinem Perl-Skript einbauen das dieser Parameter auf der Kommandozeile akzeptiert wird?


Ist die Frage vom @renee ausreichend beantwortet? Wenn nicht, kannst Du noch konkretisieren, was Du da vor hast?

Meinst Du sowas vielleicht?
Code: (dl )
perl -e 'for ( @ARGV ) { print "$_: JAU\n" if -f $_; }' / /etc/passwd
\n\n

<!--EDIT|Relais|1103211500-->
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
crackbrained
 2004-12-16 12:50
#50014 #50014
User since
2004-12-13
12 Artikel
BenutzerIn
[default_avatar]
Vielen Dank für eure Hilfe. Ich versuche erst mal eure Ratschläge umzusetzten (kann sich nur um Stunden handeln). Falls ich noch eine Frage habe melde ich mich.
Relais
 2004-12-16 13:17
#50015 #50015
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=crackbrained,16.12.2004, 11:45]dass u.a. auf der Kommandozeile den Parameter -f für ein zu lesendes Alignment akzeptiert.[/quote]
Aus dem erwähnte Dokument werde ich leider nicht schlau.

Aus Deinem Beitrag entnehme ich, daß alle (auch ich), die bisher was geraten und dann beraten haben, daneben lagen. Oder anders, Deiner ersten Frage fehlten die notwendigen Informationen, sie korrekt beantwiorten zu können. Darum:

Was ist ein "Alignment"?

Um ein Perl-Programm dazu zu bringen, Switches von aussen zu verstehen, gibt es reichlich viele Ansätze. Nicht zuletzt gibt es eine Reihe von CPAN Modulen meist mit Namen wie CPAN:getopt, da kannst Du mal schaun.

Eine ganz einfache Herangehensweise wär so:

Code: (dl )
1
2
3
4
5
my $index;
until ( $ARGV[++$index] eq '-f' ) { # Alle durchgehen und vergleichen.
# irgendwas mit den anderen Parameter tun, falls nötig
}
my $gesuchter_paramter = $ARGV[$index];
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
crackbrained
 2004-12-16 13:34
#50016 #50016
User since
2004-12-13
12 Artikel
BenutzerIn
[default_avatar]
Ein Alignment (englisch: Abgleich, Anordnung, Ausrichtung) dient dem Vergleich mehrerer Strings (technischer Begriff für Zeichenfolge, Sequenz) und wird besonders häufig in der Bioinformatik verwendet, um die funktionelle oder evolutionäre Verwandtschaft (Homologie) von DNA- oder Proteinsequenzen zu untersuchen.
(http://de.wikipedia.org/wiki/Sequenzalignment)

In meinem Fall besteht der String aus 20 verschiedene Buchstaben, welche je für eine Aminosäure stehen z.B. MKLAACFLTLLPGFAVAASWTSPGFPAFSEQGTGTFVSHAQLPKGTR.
Ich habe diese Information in meiner ersten Frage absichtlich weg gelassen, da ich mir dachte, das es zu speziell sei. In einen Alignment werden mehrere dieser Sequenzen untereinander geschrieben und dann miteinander verglichen.
Dubu
 2004-12-16 13:49
#50017 #50017
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
@Relais: Fuer die Optionsverarbeitung wuerde ich gar nicht erst auf CPAN schauen, da Getopt::Std und Getopt::Long zum Lieferumfang gehoeren.

@crackbrained: Dein -f ist nichts Perl-eigenes sondern ein Teil der Aufgabenstellung, wie Relais schon erkannt hat. Dein Perlskript soll so funktionieren, dass man es mit "meinskript -f dateiname" aufrufen kann (wobei dateiname der Name einer Datei mit Alignments ist).

Das koennte man mit Getopt::Std z.B. so loesen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Std;

our $opt_f;     # darin landet der Wert der Option -f,
                # siehe perldoc Getopt::Std
getopts('f:');  # Optionen auswerten, -f erwartet ein Argument

unless ($opt_f) {
   die "Bitte als \"$0 -f dateiname\" aufrufen!";
}

open ALIGNS, '<', $opt_f or die "kann Datei $opt_f nicht zum Lesen oeffnen: $!";

while (<ALIGNS>) {
   # mach was mit den Zeilen aus der Datei
   # ...
}

close ALIGNS;
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2004-12-16 12:16.