Hallo,
Ich hatte gestern Abend eine etwas spezielle Anforderung zu lösen.
Gegeben sind 2 Strings mit folgendem Aufbau.
String1: alerts,minutely,hourly,daily
String2: alerts,daily
Bei String1 handelt es sich um ein Options String welcher einem URL Aufruf mitgegeben wird und ein exclude Ausdrückt. Es soll in der Antwort also nichts bezüglich Alert,minutely,hourly oder daily mitgeben werden.
String2 hingegen besagt was mitgegeben werden soll. Es ist also eine negierte Anforderung von String1. Bedeutet in Grunde, das was in String2 steht darf nicht in String1 stehen damit der URL Aufruf so erfolgt das die Antwort die Dinge enthält welche ich in String2 angebenen habe.
Da zu muss also im Grunde das was in String2 steht aus String1 entfernt werden.
Ich habe hierzu als erstes die Werte aus String1 und String2 in jeweils separate Arrays gepackt um dann das was in Array2 steht also Daten aus String2 aus dem Array1 zu entfernen. Danach habe ich aus dem daraus entstandenen Datensatz einen neuen String gebaut welcher nun die Werte Komma separiert enthält welche im String2 standen und deswegen nicht mehr im String1 stehen durften.
#!/usr/bin/perl
package main;
use strict;
use warnings;
my @exclude = qw/alerts minutely hourly daily/; # Beispielhaft für String1
my $forcast = 'daily'; # Beispielhaft für einen Teil von String2
my $alerts = 0; # Beispielhaft für einen Teil von String2 vobei der Eigentliche Inhalt des String tatsächlich erst etwas Später kommt. Hat $alerts den Wert eins soll der String ",alerts" verwendet werden ist der Wert 0 soll gar nichts im String stehen.
my @forecast = split(',',$forcast);
my @alerts = split(',',($alerts ? ',alerts' : ''));
my %exclude =();
@exclude{@exclude} = @exclude;
delete @exclude{@forecast};
delete @exclude{@alerts};
print join(',',keys %exclude) . "\n";
exit 0;