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

Interpolation von literalen Strings



<< >> 9 Einträge, 1 Seite
Gast Gast
 2005-08-30 00:33
#57515 #57515
Moin,
hat jemand eine Idee wie ich einen literalen String der Steuerzeichen (\s, \t, \n, ...) enthält nachträglich interpoliert bekomme ?

Beispiel
my $test = '\ntest1\ttest2\ntest3\n';
print $test;

Bei der Ausgabe vom Test sollen die Zeilesprünge und Tabs ausgegeben werden und nicht die Zeichenfolgen \n oder \t

Natürlich könnte ich alle Steuerzeichen durch den Substitutionsoperator austauschen lassen, aber das wird doch auch einfacher gehen?

Hat irgendwer einen brauchbaren Vorschlag?
anti
 2005-08-30 00:55
#57516 #57516
User since
2003-11-29
155 Artikel
BenutzerIn
[default_avatar]
Hi,
Substitution war schon richtig, ersetze alles, außer dem Zeichen vor "\" (ok, zumindest als Näherung).
Quote
Natürlich könnte ich alle Steuerzeichen durch den Substitutionsoperator austauschen lassen, aber das wird doch auch einfacher gehen?

Die Steuerzeichen sollten eigentlich auch so ausgegeben werden!

greetz, anti


Edit: n » m\n\n

<!--EDIT|anti|1125349437-->
Fastt500
 2005-08-30 01:10
#57517 #57517
User since
2005-08-30
2 Artikel
BenutzerIn
[default_avatar]
Tach Anti
entweder verstehe ich dich nicht oder du mich nicht oder beides.
Die Zeichenfolgen die ein Steuerzeichen darstellen sollen in ein tatsächliches Steuerzeichen umgewandelt werden. (nennt man glaube ich interpolieren)
Wenn ich das Zeichen vor dem "\" entferne habe ich nicht das was ich benötige.
esskar
 2005-08-30 01:47
#57518 #57518
User since
2003-08-04
7320 Artikel
ModeratorIn
[Homepage]
user image
Code: (dl )
1
2
3
use String::Interpolate qw( interpolate );
my $test = '\ntest1\ttest2\ntest3\n';
print interpolate $test;
programming with esskar - http://esskar.wordpress.com/
…undsoweiter|undsofort… - alles zwischen 0 und 1 - http://www.usw-usf.de/
Fastt500
 2005-08-30 02:08
#57519 #57519
User since
2005-08-30
2 Artikel
BenutzerIn
[default_avatar]
Thanks,
that sounds good. But (sorry) I' am developing on WinXP with ActivePerl and on the ActiveState website don't exist this package.
esskar
 2005-08-30 02:25
#57520 #57520
User since
2003-08-04
7320 Artikel
ModeratorIn
[Homepage]
user image
well, i'm a windows xp user too, and i also use activestate's perl
i used ppm to install it

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
F:\ams\sentinel>ppm
PPM - Programmer's Package Manager version 3.2.
Copyright (c) 2001 ActiveState Corp. All Rights Reserved.
ActiveState is a division of Sophos.

Entering interactive shell. Using Term::ReadLine::Perl as readline library.

Type 'help' to get started.

ppm> search String::Interpolate
Searching in Active Repositories
could not find ParserDetails.ini in F:/Perl/site/lib/XML/SAX
 1. String-Interpolate [0.1] Wrapper for builtin the Perl interpolatation eng~
 2. String-Interpolate [0.1] (none)
ppm> install 1
Package 1:
====================
Install 'String-Interpolate' version 0.1 in ActivePerl 5.8.0.805.
====================
Downloaded 13344 bytes.
Extracting 5/5: blib/arch/auto/String/Interpolate/.exists
could not find ParserDetails.ini in F:/Perl/site/lib/XML/SAX
Installing F:\Perl\html\site\lib\String\Interpolate.html
Installing F:\Perl\site\lib\String\Interpolate.pm
Successfully installed String-Interpolate version 0.1 in ActivePerl 5.8.0.805.


my repositories are
Code: (dl )
1
2
3
4
5
6
7
8
9
10
<REPOSITORY LOCATION="http://theoryx5.uwinnipeg.ca/ppms" NAME="theory58S" SUMMARYFILE="" USERNAME="" PASSWORD="" />
    <REPOSITORY LOCATION="http://jenda.krynicky.cz/perl" NAME="jenda" SUMMARYFILE="" USERNAME="" PASSWORD="" />
    <REPOSITORY LOCATION="http://www.perlxml.net/PPM" NAME="perlxml" SUMMARYFILE="" USERNAME="" PASSWORD="" />
    <REPOSITORY LOCATION="http://crazyinsomniac.perlmonk.org/perl/ppm/5.8" NAME="crazy58" SUMMARYFILE="" USERNAME="" PASSWORD="" />
    <REPOSITORY LOCATION="http://theoryx5.uwinnipeg.ca/cgi-bin/ppmserver?urn:/PPMServer58" NAME="theory58" SUMMARYFILE="" USERNAME="" PASSWORD="" />
    <REPOSITORY LOCATION="http://datetime.perl.org/download" NAME="datetime" SUMMARYFILE="" USERNAME="" PASSWORD="" />
    <REPOSITORY LOCATION="http://savage.net.au/Perl-modules/ppm" NAME="savage" SUMMARYFILE="" USERNAME="" PASSWORD="" />
    <REPOSITORY LOCATION="http://ppm.gingerall.cz" NAME="sablot" SUMMARYFILE="" USERNAME="" PASSWORD="" />
    <REPOSITORY LOCATION="http://ppm.ActiveState.com/cgibin/PPM/ppmserver-5.8-windows.pl?urn:/PPMServer" NAME="ActiveState Package Repository" SUMMARYFILE="fetch_summary" USERNAME="" PASSWORD="" />
    <REPOSITORY LOCATION="http://openinteract.sourceforge.net/ppmpackages" NAME="openi" SUMMARYFILE="" USERNAME="" PASSWORD="" />

you can edit them at <path to perl>\site\lib\ppm.xml

by the way: ich spreche deutsch! :p\n\n

<!--EDIT|esskar|1125358424-->
programming with esskar - http://esskar.wordpress.com/
…undsoweiter|undsofort… - alles zwischen 0 und 1 - http://www.usw-usf.de/
[E|B]
 2005-08-30 15:41
#57521 #57521
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=esskar,30.08.2005, 00:25]you can edit them at <path to perl>\site\lib\ppm.xml[/quote]
Oder direkt in der Command-Prompt:

Code: (dl )
ppm rep add "name-of-rep" url-to-rep
\n\n

<!--EDIT|[E|B]|1125402127-->
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
Taulmarill
 2005-08-30 15:50
#57522 #57522
User since
2004-02-19
1749 Artikel
BenutzerIn

user image
ok, bisher hat das keiner laut ausgesprochen, aber einer muss es ja sagen. es geht auch mit einem string eval. so, jetzt is es raus. ich muss dich aber warnen. string evals sind eine sehr gefährliche sache, da eval *alles* ausführen wird, was du ihm zu fressen gibst. auch ein system 'format C:';nimmt eval einfach so hin. sei also gewarnt!
Code: (dl )
1
2
3
my $test = '\ntest1\ttest2\ntest3\n';
eval '$test = "' . $test . '"';
print $test, "\n";

ich würde dir aber wirklich raten, das o.g. modul zu installieren, auch wenn das selbst evtl. eine lücke hat, mit der man code ausführen kann, ist es doch wesendlich sicherer als alles andere, was mir grad einfällt.

wenn du keine module installieren kannst, würde ich an deiner stelle lieber substitution benutzen.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
esskar
 2005-08-31 01:48
#57523 #57523
User since
2003-08-04
7320 Artikel
ModeratorIn
[Homepage]
user image
ich wusste, dass eval eine lösung sein kann, aber bin irgendwie nicht drauf gekommen...
wahrscheinlich sollte man auch safe_interpolate aus dem Modul benutzen, wenn man nicht genau weiß, was für einen string man bearbeitet!
programming with esskar - http://esskar.wordpress.com/
…undsoweiter|undsofort… - alles zwischen 0 und 1 - http://www.usw-usf.de/
<< >> 9 Einträge, 1 Seite



View all threads created 2005-08-30 00:33.