Perl auf Mac ausgeben...

Schattenmantel

Schattenmantel

Aktives Mitglied
Thread Starter
Dabei seit
22.04.2002
Beiträge
1.753
Reaktionspunkte
1
Morgen,

wie kann ich Perl Code auf meinem Mac am besten ausgeben? Was für Tools ausser das Terminal gibts? Ich bin gerade am Perl lernen und möchte meine Übungsskripte gerne anschauen. Im Terminal werden z.B. Zeilenabstände \n nicht dargestellt.

Gruss
Schatti
 
Hi! Was meinst du denn genau? Willst du Dir den Quellcode ansehen (TextWrangler) oder das Programm ablaufen lassen. Dafür würde man dann schon das Terminal nehmen. Bei mir gibt er da auch Zeilenschaltungen \n aus.
Gib mal direkt in Terminal
perl -e 'print "Hallo\nHallo\n";'
ein. Das führt das Programm in ' ' direkt aus.
Bei mir schreibt er dann
Hallo
Hallo

Gruß TanteKäthe
 
Programm laufen lassen. Dachte das hätte ich eigentlich geschrieben. :)

Gibt es einen Unterschied zwischen perl -l und perl -e ?
Ich lass meine Testprogramme mit perl -l laufen da dies so in meinem Perl Buch stand. Und da wird der Zeilenumbruch einfach als \n dargestellt aber nicht wirklich umgebrochen.

Gruss
 
perl -e 'command'

führt das Kommando direkt aus, also ohne ein Perlskript einer Datei zu starten. Das Terminal ist kein 'Tool' für Perl, sondern Perl eine Skriptsprache für's Terminal ( oder als Modul für Apache falls Du Webseiten schreiben magst).
es ist möglich mit Perl GUI zu programmieren ( innerhalb des X11-Servers), für den Anfang ist es aber üebrsichtlicher und einfacher nur mit der Shell (dem terminal) zu arbeiten!
 
Nun ich lerne Perl für Bioinformatik. Ich werde also versuchen kleine Miniprogramme zu schreiben ( in Textfiles ) mit denen ich dann einfach Funktionen im Laboralltag vereinfachen kann. z.B. das Zählen von Startcodons in einer DNA Sequenz und das anschliessende Ausgeben dieser..
Hab aber erst angefangen zu lernen und stecke noch auf den ersten Seiten.
Als Buch benutze ich "Beginning Perl for Bioinformatics" von O'Reilly.

Und eben in diesem Buch steht ausgabe auf OSX mit Terminal und perl -l

Und wenn ich das mache mit z.B. folgendem Testscript:

Code:
#!/usr/bin/perl -w
# Concatenating DNA

# Store two DNA fragments into two variables called $DNA1 and $DNA2
$DNA1 = 'ACGGGAGGACGGGAAAATTACTACGGCAATTAGC';
$DNA2 = 'ATAGTGCCGTGAGAGTGATGTAGTA';

# Print the DNA onto the screen
print "Here are the original two DNA fragments:\n\n";

print $DNA1, "\n";

print $DNA2, "\n\n";

# Concatenate the DNA fragments into a third variable and print them
# Using "string interpolation"
$DNA3 = "$DNA1$DNA2";

print "Here is the cencatenation of the first two fragments (version 1):\n\n";

print "$DNA3\n\n";

# An alternative way unsing the "dot operator":
# Concatenate the DNA fragments into a third variable and print them
$DNA3 = $DNA1 . $DNA2;

print "Here is the concatenation of the first tow fragments (version 2):\n\n";

print "$DNA3\n\n";

# Print the same thing without using the variable $DNA3
print "Here is the concatenation of the first two fragments (version 3);\n\n";

print $DNA1, $DNA2, "\n";

exit;

Macht mein Terminal keine Zeilenumbrüche..

Später denke ich werde ich diese Programme wohl als Website Tool verwenden oder versuchen das ganze als GUI Applikation laufen zu lassen. Hab aber keine Ahnung wie das ich dann machen muss.. Erstmal heisst es Grundlagen lernen.


Gruss und danke für die Tips und Hinweise
 
In Zeile 1 verwendest Du ein sogenanntes bang:

#!/usr/bin/perl -w

sprich die Shell erkennt, daß dieses Skript von /usr/bin/perl ausgeführt wird und startet Perl automatisch, wenn Du die Datei direkt startest. Dazu mußt Du nur die Datei ausführbar machen:

# ändere den Modus der Datei so das der besitzer sie ausführen darf:
chmod u+x dateiname

dann kannst Du direkt mit ./dateiname das skript starten. Der dortige Aufruf ist übrigens ohne -l. Es wird lediglich mit -w mehr Warnungen angezeigt. Das -l war sicher mal in einem früheren Beispiel sinnvoll, in diesem Fall würd ich es weglassen ( eben weil sonst keine Zeilenumbrüche gemacht werden!).
 
Okay, hab jetzt nur etwa die Hälfte verstanden.. :D

Aber erstmal wie meinst du das mit Zugriffsrecht ändern? Soll ich das vom Terminal aus machen oder in der Datei selber? *blutigerperlanfängerbin*

Fürs Terminal wäre es der Befehl

chmod u+x dateiname ?

dateiname muss der ganze Pfad angeben werden zur Datei?

Gruss und danke!
 
*auchmalblutigeranfängerwar*

chmod ist ein Terminalbefehl, ja! Damit ändert man die Zugriffsrechte auf eine Datei. Hinter chmod gibst Du an, ob die Besitzerrechte u, die Gruppenrechte g oder die rechte für alle o geändert werden sollen. Also

chmod u oder chmod g oder chmod o

willst Du Rechte hinzufügen folgt ein + sonst ein - um sie zu entfernen.
Die einzelnen Rechte sind:

r read
w write
x execute

Wenn Du eine Textdatei ( nichts anderes ist ein Perscript ja) ausführbar machen möchtest im Terminal, dann mußt Du

chmod u+x dateiname

eingeben um die Execute-Eigenschaft hinzuzufügen. Ob der Name vollständig mit Pfad ist oder relativ ist egal. Wenn der Pfad für ls klappt, dann klappt er auch für chmod!
Executable macht nat. nur Sinn nei Dateien, die auch ausgeführt werden können - logisch. Eine Textdatei kann nicht ausgeführt werden. Daher macht es dort eigentlich keinen Sinn. ALLERDINGS hat man unter UNIX das andauernde

>perl -w meinedatei.pl

satt gehabt ( das Problem tritt ja auch bei anderen Skriptsprachen in der Shell/Terminal auf) und eine Abkürzung vereinbart. Wenn die absolut erste Zeile der Datei mit

#!

beginnt ( das nennt man bang!), dann bedeutet dies hiernach steht der Interpreter der diese Datei ausführen kann. In Deinem Fall ist es /usr/bin/perl mit der Option -w. Ich verwende meist PHP, so daß meine Dateien oft mit #! /usr/local/bin/php beginnen. Das Prinzip ist das Gleiche.

Danach ist es möglich statt

perl -w dateiname.pl

einfach direkt

./dateiname.pl

zu starten (oder bei mir eben dateiname.php). Voraussetzung dazu ist das setzen des Executable-Flags mit chmod (siehe oben). Wenn Du es nur für den user setzt, kann auch niemand sonst die Datei direkt ausführen!

Das -l laß bleiben, dann hast Du auch wieder Zeilenumbrüche!
 
Herzlichen Dank für diese ausführliche Erklärung!!!
Damit sollte es jetzt funktionieren! Werds gleich ausprobieren und mich anschliessend weiter durch mein Buch lesen. Wenn ich wieder Probleme habe, weiss ich ja jetzt wer mir helfen kann! :)

Nochmals danke!!!
 
So ausprobiert. Das mit dem chmod ist ne feine Sache, muss ich zugeben. Einfach Drag&Drop der Datei ins Terminal Fenste rund Enter und fertig.

Allerdings werden die Zeilenumbrüche immernoch mit \n angezeigt. :-(
 
Bei mir ist die Ausgabe Folgende:

Here are the original two DNA fragments:

ACGGGAGGACGGGAAAATTACTACGGCAATTAGC
ATAGTGCCGTGAGAGTGATGTAGTA

Here is the cencatenation of the first two fragments (version 1):

ACGGGAGGACGGGAAAATTACTACGGCAATTAGCATAGTGCCGTGAGAGTGATGTAGTA

Here is the concatenation of the first tow fragments (version 2):

ACGGGAGGACGGGAAAATTACTACGGCAATTAGCATAGTGCCGTGAGAGTGATGTAGTA

Here is the concatenation of the first two fragments (version 3);

ACGGGAGGACGGGAAAATTACTACGGCAATTAGCATAGTGCCGTGAGAGTGATGTAGTA

Ist Dein terminal wirklich uaf xterm-color Eingestellt? Prüf das bitte mal unter Einstellungen!!



Einfach Drag&Drop der Datei ins Terminal Fenste rund Enter und fertig.

:D der hardcore-Skripter nimmt vi asl Editor und verläßt sein schönes textfenster nie! Drag&Drop...ts ;)
 
Zuletzt bearbeitet:
Hmm, Terminal ist auf xterm-color eingestellt.

Tja bin eben "noch" kein Hardcore-Scripter sondern erst Softcore Scripter und schreibe daher in Smultron ( netter Editor ).

Gruss
 
Hast Du Dir mal die Mühe gemacht, den Vorschlage von TanteKäthe in Posting 2 nachzuvollziehen?
Ergebnis?
Und eben in diesem Buch steht ausgabe auf OSX mit Terminal und perl -l
Kannst Du den entsprechenden Abschnitt mal zitieren?
Ich kann mir das nur schwer vorstellen.
 
probier doch mal ein print STDOUT oder ein printf...
 
@maceis
Wenn ichs direkt im Terminal eingebe dann gehts auch, nur eben nicht mit der Scriptdatei, die ich oben gepostet habe, und das auch wenn ich es mit perl -e laufen lasse.

@oneOeight
Michse sein Newbe, bitte kannst du das genauer erklären was ich da ausprobieren soll?
Danke!! :)

Gruss
 
"perl -e" brauchst Du doch nicht, wenn du eine Skriptdatei verwendest.
Ich würde Dir empfehlen mal ein einfaches Anfängertutorial durchzuarbeiten.
Findest Du haufenweise im Netz.
Außerdem solltest Du lernen die perldoc zu verwenden.
Das sind Grundlagen, ohne die man nicht auskommt.

Den Tip von oneOeight kann ich nicht ganz nachvollziehen.
"print" und "print STDOUT" sind absolut identisch, wenn man nicht gerade die Standardhandles umgebogen hat, und das hast Du nicht.

Wie startes Du denn nun Dein Skript nachdem Du es mit Hilfe von chmod ausführbar gemacht hast?

./skriptname
?
 
Nachdem ich es mit chmod ausführbar gemacht habe lasse ich das Script einfach per Drag&Drop laufen. Also einfach das File ins Terminal ziehen und Enter.. ;-)

Hier nochmals ein Übungsscript:

Code:
#!/usr/bin/perl -w
# Transcribing DNA into RNA

# The DNA
$DNA = 'ACGGGAGGACGGGAAAATTACTACGGCATTAGC';

# Print the DNA onto the screen
print "Here is the startin DNA:\n\n";

print "$DNA\n\n";

# Transcribe the DNA to RNA by substituting all T's with U's.
$RNA = $DNA;

$RNA =~ s/T/U/g;

# Print the RNA onto the screen
print "Here is the result of transcribing the DNA to RNA:\n\n";

print "$RNA\n";

# Exit the programm
exit;

Als Ausgabe bekomme ich im Terminal folgendes:

Here is the startin DNA:\n\nACGGGAGGACGGGAAAATTACTACGGCATTAGC\n\nHere is the result of transcribing the DNA to RNA:\n\nACGGGAGGACGGGAAAAUUACUACGGCAUUAGC\n

Also immer noch keine Zeilenumbrüche.

Zu meinem Buch das ich verwende.
"Beginning Perl for Bioinformatics". Das Buch richtet sich an Biologen, Chemiker, Laboranten usw.. die im Berufsumfeld einfache Scripts erstellen wollen. Ist ein Anfängerbuch und daher in meinen Augen geeignet. Es geht vorallem sehr spezifisch auf Laborbedingte Programmierung ein und erklärt jedes einzelne Script mit allen Befehlen etc sehr genau. Erschienen im O'Reilly Verlag.

Allerdings hab ich keine Ahnung wo ich das mit perl -l aufgeschnappt habe.. War vielleicht auch irgend ein weiss ich nicht was in meinem Kopf. :rolleyes:
 
Ich glaube auch, daß hier Perl-seitig alles o.k. ist! Das Skript funktioniert und ob ich den Namen nun eintippe oder GUI-like das skript per Drag&Drop auf das Terminal ziehe ist egal. Spannend ist, das hier die \n nicht als Zeilenvorschub interpretiert werden. Versuch doch mal die harte Variante eines CRLF, also statt "\n" überall "\r\n" . Was passiert denn dann?
 
Nichts. Immernoch das gleiche. Alles in einer Linie und die \r\n werden einfach dargestellt... :-(
 
und wenn Du das ganze per

./dateiname.pl > ausgabe.txt

in die Datei ausgabe.txt umleitest? Wieviele Zeilen hat die dann? Das ist ja murkswürdig kopfkratz
 
Zurück
Oben Unten